| @@ -1,54 +1,55 @@ | |||
| Juce Browser Plugin Framework | |||
| ============================= | |||
| These classes let you easily turn a normal Juce component into a Mac/Windows NPAPI plugin | |||
| for use in Firefox, Safari, Opera, etc. | |||
| To create your plugin, your code just needs to implement the createBrowserPlugin() function | |||
| to return a subclass of BrowserPluginComponent, and this acts as the plugin window. | |||
| To communicate with javascript running in the host webpage, the 'var' and 'DynamicObject' juce | |||
| classes emulate javascript objects, so you can create a javascript object that represents | |||
| your plugin, and the webpage can invoke methods and access properties on this object. To | |||
| get bi-directional communication between the plugin and webpage, your webpage can simply | |||
| pass its own object to your plugin, and the plugin can call methods on this object to invoke | |||
| javascript actions. | |||
| In a similar style to audio plugins, your project has to contain a BrowserPluginCharacteristics.h | |||
| file that defines various properties of the plugin. | |||
| Building a Mac NPAPI Plugin with XCode | |||
| -------------------------------------- | |||
| - Create a new "CFPlugin Bundle" project | |||
| - Add the juce wrapper source files to the project (have a look at the demo project to | |||
| find out which files this includes). | |||
| - Set up all the usual frameworks, etc, like you would for any other juce project. | |||
| - In the project or target settings, change the "Wrapper Extension" to "plugin" | |||
| - In your target, add a build phase "Build ResourceManager resources", and add the juce_NPAPI_MacResource.r file | |||
| to this step. | |||
| - Check that your info.plist contains the same items as the demo plugin, because these needs to be set for the | |||
| browser to recognise it as a plugin. In particular, the "Bundle OS Type Code" should be set to BRPL. | |||
| - The finished bundle needs to be copied into "/Library/Internet Plug-Ins", so you might want to set up a | |||
| post-build copy step to do this automatically | |||
| Building a Windows NPAPI plugin in Visual Studio | |||
| ------------------------------------------------ | |||
| - Install the NPAPI framework and make sure that your include path is set up to include its headers | |||
| - Create a new project to build a win32 DLL | |||
| - Add the juce wrapper source files to the project (have a look at the demo project to | |||
| find out which files this includes). | |||
| - Your compiled plugin DLL must begin with the letters 'np' (in lower case) for it to be recognised as | |||
| a plugin, so you should make sure your target settings reflect this. | |||
| - To include the BrowserPluginCharacteristics.h file, you may need to add an include path to wherever this | |||
| file lives in your project. Don't use a global include path for this - just add it to the project's | |||
| search paths (both the c++ include paths and the resource include paths) | |||
| - (Refer to the normal juce instructions for setting up other project settings such as which c++ libs to link to etc) | |||
| - The finished plugin needs to be copied into "C:\Program Files\Mozilla Firefox\plugins", so you might want | |||
| to add a post-build step to copy it | |||
| - | |||
| Juce Browser Plugin Framework | |||
| ============================= | |||
| These classes let you easily turn a normal Juce component into a Mac/Windows NPAPI plugin | |||
| for use in Firefox, Safari, Opera, etc. | |||
| To create your plugin, your code just needs to implement the createBrowserPlugin() function | |||
| to return a subclass of BrowserPluginComponent, and this acts as the plugin window. | |||
| To communicate with javascript running in the host webpage, the 'var' and 'DynamicObject' juce | |||
| classes emulate javascript objects, so you can create a javascript object that represents | |||
| your plugin, and the webpage can invoke methods and access properties on this object. To | |||
| get bi-directional communication between the plugin and webpage, your webpage can simply | |||
| pass its own object to your plugin, and the plugin can call methods on this object to invoke | |||
| javascript actions. | |||
| In a similar style to audio plugins, your project has to contain a BrowserPluginCharacteristics.h | |||
| file that defines various properties of the plugin. | |||
| Building a Mac NPAPI Plugin with XCode | |||
| -------------------------------------- | |||
| - Create a new "CFPlugin Bundle" project | |||
| - Add the juce wrapper source files to the project (have a look at the demo project to | |||
| find out which files this includes). | |||
| - Set up all the usual frameworks, etc, like you would for any other juce project. | |||
| - In the project or target settings, change the "Wrapper Extension" to "plugin" | |||
| - In your target, add a build phase "Build ResourceManager resources", and add the juce_NPAPI_MacResource.r file | |||
| to this step. | |||
| - Check that your info.plist contains the same items as the demo plugin, because these needs to be set for the | |||
| browser to recognise it as a plugin. In particular, the "Bundle OS Type Code" should be set to BRPL. | |||
| - The finished bundle needs to be copied into "/Library/Internet Plug-Ins", so you might want to set up a | |||
| post-build copy step to do this automatically | |||
| Building a Windows NPAPI plugin in Visual Studio | |||
| ------------------------------------------------ | |||
| - Create a new project to build a win32 DLL | |||
| - Add the juce wrapper source files to the project (have a look at the demo project to | |||
| find out which files this includes). | |||
| - Your compiled plugin DLL must begin with the letters 'np' (in lower case) for it to be recognised as | |||
| a plugin, so you should make sure your target settings reflect this. | |||
| - To include the BrowserPluginCharacteristics.h file, you may need to add an include path to wherever this | |||
| file lives in your project. Don't use a global include path for this - just add it to the project's | |||
| search paths (both the c++ include paths and the resource include paths) | |||
| - (Refer to the normal juce instructions for setting up other project settings such as which c++ libs to link to etc) | |||
| - The finished plugin needs to be copied into "C:\Program Files\Mozilla Firefox\plugins", so you might want | |||
| to add a post-build step to copy it | |||
| - Note that the "browser plugins/wrapper/npapi" folder contains a copy of some NPAPI header files. If you're | |||
| building a closed-source project, please check the licensing details in these files to make sure | |||
| you're not breaking any Mozilla licensing restictions. | |||
| @@ -48,9 +48,7 @@ | |||
| #define _X86_ | |||
| #include <windows.h> | |||
| #include <windowsx.h> | |||
| #include "npapi.h" | |||
| #include "npupp.h" | |||
| #include "npruntime.h" | |||
| #include "npapi/npupp.h" | |||
| // Cunning trick used to add functions to export list and avoid messing about with .def files. | |||
| // (can't add a declspec because the functions have already been pre-declared in the npapi headers). | |||
| @@ -0,0 +1,13 @@ | |||
| This folder contains the minimum set of header files that is needed to build the Juce NPAPI | |||
| wrapper on Windows. (OSX already provides these headers so they're not used in a Mac build) | |||
| I've included them in the Juce tree because there seem to be so many subtle variations of them | |||
| floating around that finding a version that's compatible with the juce wrapper is actually a lot harder | |||
| than it sounds! These particular files are taken from the XulRunner tree, where they live in | |||
| xulrunner-sdk/sdk/include. To get the rest of the XulRunner code, please visit: | |||
| https://developer.mozilla.org/En/XULRunner | |||
| Obviously these files are in no way related to Juce, and aren't covered by the Juce license. If you're | |||
| going to use them in your own projects, then please check their own licensing details to satisfy | |||
| yourself that you're allowed to do what you want to do with them. | |||
| @@ -0,0 +1,215 @@ | |||
| /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- | |||
| * | |||
| * ***** BEGIN LICENSE BLOCK ***** | |||
| * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |||
| * | |||
| * The contents of this file are subject to the Mozilla Public License Version | |||
| * 1.1 (the "License"); you may not use this file except in compliance with | |||
| * the License. You may obtain a copy of the License at | |||
| * http://www.mozilla.org/MPL/ | |||
| * | |||
| * Software distributed under the License is distributed on an "AS IS" basis, | |||
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |||
| * for the specific language governing rights and limitations under the | |||
| * License. | |||
| * | |||
| * The Original Code is mozilla.org code. | |||
| * | |||
| * The Initial Developer of the Original Code is | |||
| * Netscape Communications Corporation. | |||
| * Portions created by the Initial Developer are Copyright (C) 1998 | |||
| * the Initial Developer. All Rights Reserved. | |||
| * | |||
| * Contributor(s): | |||
| * | |||
| * Alternatively, the contents of this file may be used under the terms of | |||
| * either the GNU General Public License Version 2 or later (the "GPL"), or | |||
| * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | |||
| * in which case the provisions of the GPL or the LGPL are applicable instead | |||
| * of those above. If you wish to allow use of your version of this file only | |||
| * under the terms of either the GPL or the LGPL, and not to allow others to | |||
| * use your version of this file under the terms of the MPL, indicate your | |||
| * decision by deleting the provisions above and replace them with the notice | |||
| * and other provisions required by the GPL or the LGPL. If you do not delete | |||
| * the provisions above, a recipient may use your version of this file under | |||
| * the terms of any one of the MPL, the GPL or the LGPL. | |||
| * | |||
| * ***** END LICENSE BLOCK ***** | |||
| * | |||
| * | |||
| * This Original Code has been modified by IBM Corporation. | |||
| * Modifications made by IBM described herein are | |||
| * Copyright (c) International Business Machines | |||
| * Corporation, 2000 | |||
| * | |||
| * Modifications to Mozilla code or documentation | |||
| * identified per MPL Section 3.3 | |||
| * | |||
| * Date Modified by Description of modification | |||
| * 03/27/2000 IBM Corp. Set JNICALL to Optlink for | |||
| * use in OS2 | |||
| */ | |||
| /******************************************************************************* | |||
| * Netscape version of jni_md.h -- depends on jri_md.h | |||
| ******************************************************************************/ | |||
| #ifndef JNI_MD_H | |||
| #define JNI_MD_H | |||
| #include "prtypes.h" /* needed for _declspec */ | |||
| /******************************************************************************* | |||
| * WHAT'S UP WITH THIS FILE? | |||
| * | |||
| * This is where we define the mystical JNI_PUBLIC_API macro that works on all | |||
| * platforms. If you're running with Visual C++, Symantec C, or Borland's | |||
| * development environment on the PC, you're all set. Or if you're on the Mac | |||
| * with Metrowerks, Symantec or MPW with SC you're ok too. For UNIX it shouldn't | |||
| * matter. | |||
| * Changes by sailesh on 9/26 | |||
| * There are two symbols used in the declaration of the JNI functions | |||
| * and native code that uses the JNI: | |||
| * JNICALL - specifies the calling convention | |||
| * JNIEXPORT - specifies export status of the function | |||
| * | |||
| * The syntax to specify calling conventions is different in Win16 and | |||
| * Win32 - the brains at Micro$oft at work here. JavaSoft in their | |||
| * infinite wisdom cares for no platform other than Win32, and so they | |||
| * just define these two symbols as: | |||
| #define JNIEXPORT __declspec(dllexport) | |||
| #define JNICALL __stdcall | |||
| * We deal with this, in the way JRI defines the JRI_PUBLIC_API, by | |||
| * defining a macro called JNI_PUBLIC_API. Any of our developers who | |||
| * wish to use code for Win16 and Win32, _must_ use JNI_PUBLIC_API to | |||
| * be able to export functions properly. | |||
| * Since we must also maintain compatibility with JavaSoft, we | |||
| * continue to define the symbol JNIEXPORT. However, use of this | |||
| * internally is deprecated, since it will cause a mess on Win16. | |||
| * We _do not_ need a new symbol called JNICALL. Instead we | |||
| * redefine JNICALL in the same way JRI_CALLBACK was defined. | |||
| ******************************************************************************/ | |||
| /* DLL Entry modifiers... */ | |||
| /* Win32 */ | |||
| #if defined(XP_WIN) || defined(_WINDOWS) || defined(WIN32) || defined(_WIN32) | |||
| # include <windows.h> | |||
| # if defined(_MSC_VER) || defined(__GNUC__) | |||
| # if defined(WIN32) || defined(_WIN32) | |||
| # define JNI_PUBLIC_API(ResultType) _declspec(dllexport) ResultType __stdcall | |||
| # define JNI_PUBLIC_VAR(VarType) VarType | |||
| # define JNI_NATIVE_STUB(ResultType) _declspec(dllexport) ResultType | |||
| # define JNICALL __stdcall | |||
| # else /* !_WIN32 */ | |||
| # if defined(_WINDLL) | |||
| # define JNI_PUBLIC_API(ResultType) ResultType __cdecl __export __loadds | |||
| # define JNI_PUBLIC_VAR(VarType) VarType | |||
| # define JNI_NATIVE_STUB(ResultType) ResultType __cdecl __loadds | |||
| # define JNICALL __loadds | |||
| # else /* !WINDLL */ | |||
| # define JNI_PUBLIC_API(ResultType) ResultType __cdecl __export | |||
| # define JNI_PUBLIC_VAR(VarType) VarType | |||
| # define JNI_NATIVE_STUB(ResultType) ResultType __cdecl __export | |||
| # define JNICALL __export | |||
| # endif /* !WINDLL */ | |||
| # endif /* !_WIN32 */ | |||
| # elif defined(__BORLANDC__) | |||
| # if defined(WIN32) || defined(_WIN32) | |||
| # define JNI_PUBLIC_API(ResultType) __export ResultType | |||
| # define JNI_PUBLIC_VAR(VarType) VarType | |||
| # define JNI_NATIVE_STUB(ResultType) __export ResultType | |||
| # define JNICALL | |||
| # else /* !_WIN32 */ | |||
| # define JNI_PUBLIC_API(ResultType) ResultType _cdecl _export _loadds | |||
| # define JNI_PUBLIC_VAR(VarType) VarType | |||
| # define JNI_NATIVE_STUB(ResultType) ResultType _cdecl _loadds | |||
| # define JNICALL _loadds | |||
| # endif | |||
| # else | |||
| # error Unsupported PC development environment. | |||
| # endif | |||
| # ifndef IS_LITTLE_ENDIAN | |||
| # define IS_LITTLE_ENDIAN | |||
| # endif | |||
| /* This is the stuff inherited from JavaSoft .. */ | |||
| # define JNIEXPORT __declspec(dllexport) | |||
| # define JNIIMPORT __declspec(dllimport) | |||
| /* OS/2 */ | |||
| #elif defined(XP_OS2) | |||
| # ifdef XP_OS2_VACPP | |||
| # define JNI_PUBLIC_API(ResultType) ResultType _System | |||
| # define JNI_PUBLIC_VAR(VarType) VarType | |||
| # define JNICALL _Optlink | |||
| # define JNIEXPORT | |||
| # define JNIIMPORT | |||
| # elif defined(__declspec) | |||
| # define JNI_PUBLIC_API(ResultType) __declspec(dllexport) ResultType | |||
| # define JNI_PUBLIC_VAR(VarType) VarType | |||
| # define JNI_NATIVE_STUB(ResultType) __declspec(dllexport) ResultType | |||
| # define JNICALL | |||
| # define JNIEXPORT | |||
| # define JNIIMPORT | |||
| # else | |||
| # define JNI_PUBLIC_API(ResultType) ResultType | |||
| # define JNI_PUBLIC_VAR(VarType) VarType | |||
| # define JNICALL | |||
| # define JNIEXPORT | |||
| # define JNIIMPORT | |||
| # endif | |||
| # ifndef IS_LITTLE_ENDIAN | |||
| # define IS_LITTLE_ENDIAN | |||
| # endif | |||
| /* Mac */ | |||
| #elif macintosh || Macintosh || THINK_C | |||
| # if defined(__MWERKS__) /* Metrowerks */ | |||
| # if !__option(enumsalwaysint) | |||
| # error You need to define 'Enums Always Int' for your project. | |||
| # endif | |||
| # if defined(TARGET_CPU_68K) && !TARGET_RT_MAC_CFM | |||
| # if !__option(fourbyteints) | |||
| # error You need to define 'Struct Alignment: 68k' for your project. | |||
| # endif | |||
| # endif /* !GENERATINGCFM */ | |||
| # define JNI_PUBLIC_API(ResultType) __declspec(export) ResultType | |||
| # define JNI_PUBLIC_VAR(VarType) JNI_PUBLIC_API(VarType) | |||
| # define JNI_NATIVE_STUB(ResultType) JNI_PUBLIC_API(ResultType) | |||
| # elif defined(__SC__) /* Symantec */ | |||
| # error What are the Symantec defines? (warren@netscape.com) | |||
| # elif macintosh && applec /* MPW */ | |||
| # error Please upgrade to the latest MPW compiler (SC). | |||
| # else | |||
| # error Unsupported Mac development environment. | |||
| # endif | |||
| # define JNICALL | |||
| /* This is the stuff inherited from JavaSoft .. */ | |||
| # define JNIEXPORT | |||
| # define JNIIMPORT | |||
| /* Unix or else */ | |||
| #else | |||
| # define JNI_PUBLIC_API(ResultType) ResultType | |||
| # define JNI_PUBLIC_VAR(VarType) VarType | |||
| # define JNI_NATIVE_STUB(ResultType) ResultType | |||
| # define JNICALL | |||
| /* This is the stuff inherited from JavaSoft .. */ | |||
| # define JNIEXPORT | |||
| # define JNIIMPORT | |||
| #endif | |||
| #ifndef FAR /* for non-Win16 */ | |||
| #define FAR | |||
| #endif | |||
| /* Get the rest of the stuff from jri_md.h */ | |||
| #include "jri_md.h" | |||
| #endif /* JNI_MD_H */ | |||
| @@ -0,0 +1,689 @@ | |||
| /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | |||
| /* ***** BEGIN LICENSE BLOCK ***** | |||
| * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |||
| * | |||
| * The contents of this file are subject to the Mozilla Public License Version | |||
| * 1.1 (the "License"); you may not use this file except in compliance with | |||
| * the License. You may obtain a copy of the License at | |||
| * http://www.mozilla.org/MPL/ | |||
| * | |||
| * Software distributed under the License is distributed on an "AS IS" basis, | |||
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |||
| * for the specific language governing rights and limitations under the | |||
| * License. | |||
| * | |||
| * The Original Code is mozilla.org code. | |||
| * | |||
| * The Initial Developer of the Original Code is | |||
| * Netscape Communications Corporation. | |||
| * Portions created by the Initial Developer are Copyright (C) 1998 | |||
| * the Initial Developer. All Rights Reserved. | |||
| * | |||
| * Contributor(s): | |||
| * | |||
| * Alternatively, the contents of this file may be used under the terms of | |||
| * either the GNU General Public License Version 2 or later (the "GPL"), or | |||
| * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | |||
| * in which case the provisions of the GPL or the LGPL are applicable instead | |||
| * of those above. If you wish to allow use of your version of this file only | |||
| * under the terms of either the GPL or the LGPL, and not to allow others to | |||
| * use your version of this file under the terms of the MPL, indicate your | |||
| * decision by deleting the provisions above and replace them with the notice | |||
| * and other provisions required by the GPL or the LGPL. If you do not delete | |||
| * the provisions above, a recipient may use your version of this file under | |||
| * the terms of any one of the MPL, the GPL or the LGPL. | |||
| * | |||
| * ***** END LICENSE BLOCK ***** */ | |||
| /******************************************************************************* | |||
| * Java Runtime Interface | |||
| ******************************************************************************/ | |||
| #ifndef JRI_H | |||
| #define JRI_H | |||
| #include "jritypes.h" | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #endif /* __cplusplus */ | |||
| /******************************************************************************* | |||
| * JRIEnv | |||
| ******************************************************************************/ | |||
| /* The type of the JRIEnv interface. */ | |||
| typedef struct JRIEnvInterface JRIEnvInterface; | |||
| /* The type of a JRIEnv instance. */ | |||
| typedef const JRIEnvInterface* JRIEnv; | |||
| /******************************************************************************* | |||
| * JRIEnv Operations | |||
| ******************************************************************************/ | |||
| #define JRI_DefineClass(env, classLoader, buf, bufLen) \ | |||
| (((*(env))->DefineClass)(env, JRI_DefineClass_op, classLoader, buf, bufLen)) | |||
| #define JRI_FindClass(env, name) \ | |||
| (((*(env))->FindClass)(env, JRI_FindClass_op, name)) | |||
| #define JRI_Throw(env, obj) \ | |||
| (((*(env))->Throw)(env, JRI_Throw_op, obj)) | |||
| #define JRI_ThrowNew(env, clazz, message) \ | |||
| (((*(env))->ThrowNew)(env, JRI_ThrowNew_op, clazz, message)) | |||
| #define JRI_ExceptionOccurred(env) \ | |||
| (((*(env))->ExceptionOccurred)(env, JRI_ExceptionOccurred_op)) | |||
| #define JRI_ExceptionDescribe(env) \ | |||
| (((*(env))->ExceptionDescribe)(env, JRI_ExceptionDescribe_op)) | |||
| #define JRI_ExceptionClear(env) \ | |||
| (((*(env))->ExceptionClear)(env, JRI_ExceptionClear_op)) | |||
| #define JRI_NewGlobalRef(env, ref) \ | |||
| (((*(env))->NewGlobalRef)(env, JRI_NewGlobalRef_op, ref)) | |||
| #define JRI_DisposeGlobalRef(env, gref) \ | |||
| (((*(env))->DisposeGlobalRef)(env, JRI_DisposeGlobalRef_op, gref)) | |||
| #define JRI_GetGlobalRef(env, gref) \ | |||
| (((*(env))->GetGlobalRef)(env, JRI_GetGlobalRef_op, gref)) | |||
| #define JRI_SetGlobalRef(env, gref, ref) \ | |||
| (((*(env))->SetGlobalRef)(env, JRI_SetGlobalRef_op, gref, ref)) | |||
| #define JRI_IsSameObject(env, a, b) \ | |||
| (((*(env))->IsSameObject)(env, JRI_IsSameObject_op, a, b)) | |||
| #define JRI_NewObject(env) ((*(env))->NewObject) | |||
| #define JRI_NewObjectV(env, clazz, methodID, args) \ | |||
| (((*(env))->NewObjectV)(env, JRI_NewObject_op_va_list, clazz, methodID, args)) | |||
| #define JRI_NewObjectA(env, clazz, method, args) \ | |||
| (((*(env))->NewObjectA)(env, JRI_NewObject_op_array, clazz, methodID, args)) | |||
| #define JRI_GetObjectClass(env, obj) \ | |||
| (((*(env))->GetObjectClass)(env, JRI_GetObjectClass_op, obj)) | |||
| #define JRI_IsInstanceOf(env, obj, clazz) \ | |||
| (((*(env))->IsInstanceOf)(env, JRI_IsInstanceOf_op, obj, clazz)) | |||
| #define JRI_GetMethodID(env, clazz, name, sig) \ | |||
| (((*(env))->GetMethodID)(env, JRI_GetMethodID_op, clazz, name, sig)) | |||
| #define JRI_CallMethod(env) ((*(env))->CallMethod) | |||
| #define JRI_CallMethodV(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodV)(env, JRI_CallMethod_op_va_list, obj, methodID, args)) | |||
| #define JRI_CallMethodA(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodA)(env, JRI_CallMethod_op_array, obj, methodID, args)) | |||
| #define JRI_CallMethodBoolean(env) ((*(env))->CallMethodBoolean) | |||
| #define JRI_CallMethodBooleanV(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodBooleanV)(env, JRI_CallMethodBoolean_op_va_list, obj, methodID, args)) | |||
| #define JRI_CallMethodBooleanA(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodBooleanA)(env, JRI_CallMethodBoolean_op_array, obj, methodID, args)) | |||
| #define JRI_CallMethodByte(env) ((*(env))->CallMethodByte) | |||
| #define JRI_CallMethodByteV(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodByteV)(env, JRI_CallMethodByte_op_va_list, obj, methodID, args)) | |||
| #define JRI_CallMethodByteA(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodByteA)(env, JRI_CallMethodByte_op_array, obj, methodID, args)) | |||
| #define JRI_CallMethodChar(env) ((*(env))->CallMethodChar) | |||
| #define JRI_CallMethodCharV(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodCharV)(env, JRI_CallMethodChar_op_va_list, obj, methodID, args)) | |||
| #define JRI_CallMethodCharA(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodCharA)(env, JRI_CallMethodChar_op_array, obj, methodID, args)) | |||
| #define JRI_CallMethodShort(env) ((*(env))->CallMethodShort) | |||
| #define JRI_CallMethodShortV(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodShortV)(env, JRI_CallMethodShort_op_va_list, obj, methodID, args)) | |||
| #define JRI_CallMethodShortA(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodShortA)(env, JRI_CallMethodShort_op_array, obj, methodID, args)) | |||
| #define JRI_CallMethodInt(env) ((*(env))->CallMethodInt) | |||
| #define JRI_CallMethodIntV(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodIntV)(env, JRI_CallMethodInt_op_va_list, obj, methodID, args)) | |||
| #define JRI_CallMethodIntA(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodIntA)(env, JRI_CallMethodInt_op_array, obj, methodID, args)) | |||
| #define JRI_CallMethodLong(env) ((*(env))->CallMethodLong) | |||
| #define JRI_CallMethodLongV(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodLongV)(env, JRI_CallMethodLong_op_va_list, obj, methodID, args)) | |||
| #define JRI_CallMethodLongA(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodLongA)(env, JRI_CallMethodLong_op_array, obj, methodID, args)) | |||
| #define JRI_CallMethodFloat(env) ((*(env))->CallMethodFloat) | |||
| #define JRI_CallMethodFloatV(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodFloatV)(env, JRI_CallMethodFloat_op_va_list, obj, methodID, args)) | |||
| #define JRI_CallMethodFloatA(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodFloatA)(env, JRI_CallMethodFloat_op_array, obj, methodID, args)) | |||
| #define JRI_CallMethodDouble(env) ((*(env))->CallMethodDouble) | |||
| #define JRI_CallMethodDoubleV(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodDoubleV)(env, JRI_CallMethodDouble_op_va_list, obj, methodID, args)) | |||
| #define JRI_CallMethodDoubleA(env, obj, methodID, args) \ | |||
| (((*(env))->CallMethodDoubleA)(env, JRI_CallMethodDouble_op_array, obj, methodID, args)) | |||
| #define JRI_GetFieldID(env, clazz, name, sig) \ | |||
| (((*(env))->GetFieldID)(env, JRI_GetFieldID_op, clazz, name, sig)) | |||
| #define JRI_GetField(env, obj, fieldID) \ | |||
| (((*(env))->GetField)(env, JRI_GetField_op, obj, fieldID)) | |||
| #define JRI_GetFieldBoolean(env, obj, fieldID) \ | |||
| (((*(env))->GetFieldBoolean)(env, JRI_GetFieldBoolean_op, obj, fieldID)) | |||
| #define JRI_GetFieldByte(env, obj, fieldID) \ | |||
| (((*(env))->GetFieldByte)(env, JRI_GetFieldByte_op, obj, fieldID)) | |||
| #define JRI_GetFieldChar(env, obj, fieldID) \ | |||
| (((*(env))->GetFieldChar)(env, JRI_GetFieldChar_op, obj, fieldID)) | |||
| #define JRI_GetFieldShort(env, obj, fieldID) \ | |||
| (((*(env))->GetFieldShort)(env, JRI_GetFieldShort_op, obj, fieldID)) | |||
| #define JRI_GetFieldInt(env, obj, fieldID) \ | |||
| (((*(env))->GetFieldInt)(env, JRI_GetFieldInt_op, obj, fieldID)) | |||
| #define JRI_GetFieldLong(env, obj, fieldID) \ | |||
| (((*(env))->GetFieldLong)(env, JRI_GetFieldLong_op, obj, fieldID)) | |||
| #define JRI_GetFieldFloat(env, obj, fieldID) \ | |||
| (((*(env))->GetFieldFloat)(env, JRI_GetFieldFloat_op, obj, fieldID)) | |||
| #define JRI_GetFieldDouble(env, obj, fieldID) \ | |||
| (((*(env))->GetFieldDouble)(env, JRI_GetFieldDouble_op, obj, fieldID)) | |||
| #define JRI_SetField(env, obj, fieldID, value) \ | |||
| (((*(env))->SetField)(env, JRI_SetField_op, obj, fieldID, value)) | |||
| #define JRI_SetFieldBoolean(env, obj, fieldID, value) \ | |||
| (((*(env))->SetFieldBoolean)(env, JRI_SetFieldBoolean_op, obj, fieldID, value)) | |||
| #define JRI_SetFieldByte(env, obj, fieldID, value) \ | |||
| (((*(env))->SetFieldByte)(env, JRI_SetFieldByte_op, obj, fieldID, value)) | |||
| #define JRI_SetFieldChar(env, obj, fieldID, value) \ | |||
| (((*(env))->SetFieldChar)(env, JRI_SetFieldChar_op, obj, fieldID, value)) | |||
| #define JRI_SetFieldShort(env, obj, fieldID, value) \ | |||
| (((*(env))->SetFieldShort)(env, JRI_SetFieldShort_op, obj, fieldID, value)) | |||
| #define JRI_SetFieldInt(env, obj, fieldID, value) \ | |||
| (((*(env))->SetFieldInt)(env, JRI_SetFieldInt_op, obj, fieldID, value)) | |||
| #define JRI_SetFieldLong(env, obj, fieldID, value) \ | |||
| (((*(env))->SetFieldLong)(env, JRI_SetFieldLong_op, obj, fieldID, value)) | |||
| #define JRI_SetFieldFloat(env, obj, fieldID, value) \ | |||
| (((*(env))->SetFieldFloat)(env, JRI_SetFieldFloat_op, obj, fieldID, value)) | |||
| #define JRI_SetFieldDouble(env, obj, fieldID, value) \ | |||
| (((*(env))->SetFieldDouble)(env, JRI_SetFieldDouble_op, obj, fieldID, value)) | |||
| #define JRI_IsSubclassOf(env, a, b) \ | |||
| (((*(env))->IsSubclassOf)(env, JRI_IsSubclassOf_op, a, b)) | |||
| #define JRI_GetStaticMethodID(env, clazz, name, sig) \ | |||
| (((*(env))->GetStaticMethodID)(env, JRI_GetStaticMethodID_op, clazz, name, sig)) | |||
| #define JRI_CallStaticMethod(env) ((*(env))->CallStaticMethod) | |||
| #define JRI_CallStaticMethodV(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodV)(env, JRI_CallStaticMethod_op_va_list, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodA(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodA)(env, JRI_CallStaticMethod_op_array, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodBoolean(env) ((*(env))->CallStaticMethodBoolean) | |||
| #define JRI_CallStaticMethodBooleanV(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodBooleanV)(env, JRI_CallStaticMethodBoolean_op_va_list, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodBooleanA(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodBooleanA)(env, JRI_CallStaticMethodBoolean_op_array, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodByte(env) ((*(env))->CallStaticMethodByte) | |||
| #define JRI_CallStaticMethodByteV(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodByteV)(env, JRI_CallStaticMethodByte_op_va_list, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodByteA(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodByteA)(env, JRI_CallStaticMethodByte_op_array, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodChar(env) ((*(env))->CallStaticMethodChar) | |||
| #define JRI_CallStaticMethodCharV(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodCharV)(env, JRI_CallStaticMethodChar_op_va_list, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodCharA(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodCharA)(env, JRI_CallStaticMethodChar_op_array, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodShort(env) ((*(env))->CallStaticMethodShort) | |||
| #define JRI_CallStaticMethodShortV(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodShortV)(env, JRI_CallStaticMethodShort_op_va_list, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodShortA(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodShortA)(env, JRI_CallStaticMethodShort_op_array, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodInt(env) ((*(env))->CallStaticMethodInt) | |||
| #define JRI_CallStaticMethodIntV(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodIntV)(env, JRI_CallStaticMethodInt_op_va_list, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodIntA(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodIntA)(env, JRI_CallStaticMethodInt_op_array, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodLong(env) ((*(env))->CallStaticMethodLong) | |||
| #define JRI_CallStaticMethodLongV(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodLongV)(env, JRI_CallStaticMethodLong_op_va_list, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodLongA(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodLongA)(env, JRI_CallStaticMethodLong_op_array, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodFloat(env) ((*(env))->CallStaticMethodFloat) | |||
| #define JRI_CallStaticMethodFloatV(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodFloatV)(env, JRI_CallStaticMethodFloat_op_va_list, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodFloatA(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodFloatA)(env, JRI_CallStaticMethodFloat_op_array, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodDouble(env) ((*(env))->CallStaticMethodDouble) | |||
| #define JRI_CallStaticMethodDoubleV(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodDoubleV)(env, JRI_CallStaticMethodDouble_op_va_list, clazz, methodID, args)) | |||
| #define JRI_CallStaticMethodDoubleA(env, clazz, methodID, args) \ | |||
| (((*(env))->CallStaticMethodDoubleA)(env, JRI_CallStaticMethodDouble_op_array, clazz, methodID, args)) | |||
| #define JRI_GetStaticFieldID(env, clazz, name, sig) \ | |||
| (((*(env))->GetStaticFieldID)(env, JRI_GetStaticFieldID_op, clazz, name, sig)) | |||
| #define JRI_GetStaticField(env, clazz, fieldID) \ | |||
| (((*(env))->GetStaticField)(env, JRI_GetStaticField_op, clazz, fieldID)) | |||
| #define JRI_GetStaticFieldBoolean(env, clazz, fieldID) \ | |||
| (((*(env))->GetStaticFieldBoolean)(env, JRI_GetStaticFieldBoolean_op, clazz, fieldID)) | |||
| #define JRI_GetStaticFieldByte(env, clazz, fieldID) \ | |||
| (((*(env))->GetStaticFieldByte)(env, JRI_GetStaticFieldByte_op, clazz, fieldID)) | |||
| #define JRI_GetStaticFieldChar(env, clazz, fieldID) \ | |||
| (((*(env))->GetStaticFieldChar)(env, JRI_GetStaticFieldChar_op, clazz, fieldID)) | |||
| #define JRI_GetStaticFieldShort(env, clazz, fieldID) \ | |||
| (((*(env))->GetStaticFieldShort)(env, JRI_GetStaticFieldShort_op, clazz, fieldID)) | |||
| #define JRI_GetStaticFieldInt(env, clazz, fieldID) \ | |||
| (((*(env))->GetStaticFieldInt)(env, JRI_GetStaticFieldInt_op, clazz, fieldID)) | |||
| #define JRI_GetStaticFieldLong(env, clazz, fieldID) \ | |||
| (((*(env))->GetStaticFieldLong)(env, JRI_GetStaticFieldLong_op, clazz, fieldID)) | |||
| #define JRI_GetStaticFieldFloat(env, clazz, fieldID) \ | |||
| (((*(env))->GetStaticFieldFloat)(env, JRI_GetStaticFieldFloat_op, clazz, fieldID)) | |||
| #define JRI_GetStaticFieldDouble(env, clazz, fieldID) \ | |||
| (((*(env))->GetStaticFieldDouble)(env, JRI_GetStaticFieldDouble_op, clazz, fieldID)) | |||
| #define JRI_SetStaticField(env, clazz, fieldID, value) \ | |||
| (((*(env))->SetStaticField)(env, JRI_SetStaticField_op, clazz, fieldID, value)) | |||
| #define JRI_SetStaticFieldBoolean(env, clazz, fieldID, value) \ | |||
| (((*(env))->SetStaticFieldBoolean)(env, JRI_SetStaticFieldBoolean_op, clazz, fieldID, value)) | |||
| #define JRI_SetStaticFieldByte(env, clazz, fieldID, value) \ | |||
| (((*(env))->SetStaticFieldByte)(env, JRI_SetStaticFieldByte_op, clazz, fieldID, value)) | |||
| #define JRI_SetStaticFieldChar(env, clazz, fieldID, value) \ | |||
| (((*(env))->SetStaticFieldChar)(env, JRI_SetStaticFieldChar_op, clazz, fieldID, value)) | |||
| #define JRI_SetStaticFieldShort(env, clazz, fieldID, value) \ | |||
| (((*(env))->SetStaticFieldShort)(env, JRI_SetStaticFieldShort_op, clazz, fieldID, value)) | |||
| #define JRI_SetStaticFieldInt(env, clazz, fieldID, value) \ | |||
| (((*(env))->SetStaticFieldInt)(env, JRI_SetStaticFieldInt_op, clazz, fieldID, value)) | |||
| #define JRI_SetStaticFieldLong(env, clazz, fieldID, value) \ | |||
| (((*(env))->SetStaticFieldLong)(env, JRI_SetStaticFieldLong_op, clazz, fieldID, value)) | |||
| #define JRI_SetStaticFieldFloat(env, clazz, fieldID, value) \ | |||
| (((*(env))->SetStaticFieldFloat)(env, JRI_SetStaticFieldFloat_op, clazz, fieldID, value)) | |||
| #define JRI_SetStaticFieldDouble(env, clazz, fieldID, value) \ | |||
| (((*(env))->SetStaticFieldDouble)(env, JRI_SetStaticFieldDouble_op, clazz, fieldID, value)) | |||
| #define JRI_NewString(env, unicode, len) \ | |||
| (((*(env))->NewString)(env, JRI_NewString_op, unicode, len)) | |||
| #define JRI_GetStringLength(env, string) \ | |||
| (((*(env))->GetStringLength)(env, JRI_GetStringLength_op, string)) | |||
| #define JRI_GetStringChars(env, string) \ | |||
| (((*(env))->GetStringChars)(env, JRI_GetStringChars_op, string)) | |||
| #define JRI_NewStringUTF(env, utf, len) \ | |||
| (((*(env))->NewStringUTF)(env, JRI_NewStringUTF_op, utf, len)) | |||
| #define JRI_GetStringUTFLength(env, string) \ | |||
| (((*(env))->GetStringUTFLength)(env, JRI_GetStringUTFLength_op, string)) | |||
| #define JRI_GetStringUTFChars(env, string) \ | |||
| (((*(env))->GetStringUTFChars)(env, JRI_GetStringUTFChars_op, string)) | |||
| #define JRI_NewScalarArray(env, length, elementSig, initialElements) \ | |||
| (((*(env))->NewScalarArray)(env, JRI_NewScalarArray_op, length, elementSig, initialElements)) | |||
| #define JRI_GetScalarArrayLength(env, array) \ | |||
| (((*(env))->GetScalarArrayLength)(env, JRI_GetScalarArrayLength_op, array)) | |||
| #define JRI_GetScalarArrayElements(env, array) \ | |||
| (((*(env))->GetScalarArrayElements)(env, JRI_GetScalarArrayElements_op, array)) | |||
| #define JRI_NewObjectArray(env, length, elementClass, initialElement) \ | |||
| (((*(env))->NewObjectArray)(env, JRI_NewObjectArray_op, length, elementClass, initialElement)) | |||
| #define JRI_GetObjectArrayLength(env, array) \ | |||
| (((*(env))->GetObjectArrayLength)(env, JRI_GetObjectArrayLength_op, array)) | |||
| #define JRI_GetObjectArrayElement(env, array, index) \ | |||
| (((*(env))->GetObjectArrayElement)(env, JRI_GetObjectArrayElement_op, array, index)) | |||
| #define JRI_SetObjectArrayElement(env, array, index, value) \ | |||
| (((*(env))->SetObjectArrayElement)(env, JRI_SetObjectArrayElement_op, array, index, value)) | |||
| #define JRI_RegisterNatives(env, clazz, nameAndSigArray, nativeProcArray) \ | |||
| (((*(env))->RegisterNatives)(env, JRI_RegisterNatives_op, clazz, nameAndSigArray, nativeProcArray)) | |||
| #define JRI_UnregisterNatives(env, clazz) \ | |||
| (((*(env))->UnregisterNatives)(env, JRI_UnregisterNatives_op, clazz)) | |||
| #define JRI_NewStringPlatform(env, string, len, encoding, encodingLength) \ | |||
| (((*(env))->NewStringPlatform)(env, JRI_NewStringPlatform_op, string, len, encoding, encodingLength)) | |||
| #define JRI_GetStringPlatformChars(env, string, encoding, encodingLength) \ | |||
| (((*(env))->GetStringPlatformChars)(env, JRI_GetStringPlatformChars_op, string, encoding, encodingLength)) | |||
| /******************************************************************************* | |||
| * JRIEnv Interface | |||
| ******************************************************************************/ | |||
| struct java_lang_ClassLoader; | |||
| struct java_lang_Class; | |||
| struct java_lang_Throwable; | |||
| struct java_lang_Object; | |||
| struct java_lang_String; | |||
| struct JRIEnvInterface { | |||
| void* reserved0; | |||
| void* reserved1; | |||
| void* reserved2; | |||
| void* reserved3; | |||
| struct java_lang_Class* (*FindClass)(JRIEnv* env, jint op, const char* a); | |||
| void (*Throw)(JRIEnv* env, jint op, struct java_lang_Throwable* a); | |||
| void (*ThrowNew)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b); | |||
| struct java_lang_Throwable* (*ExceptionOccurred)(JRIEnv* env, jint op); | |||
| void (*ExceptionDescribe)(JRIEnv* env, jint op); | |||
| void (*ExceptionClear)(JRIEnv* env, jint op); | |||
| jglobal (*NewGlobalRef)(JRIEnv* env, jint op, void* a); | |||
| void (*DisposeGlobalRef)(JRIEnv* env, jint op, jglobal a); | |||
| void* (*GetGlobalRef)(JRIEnv* env, jint op, jglobal a); | |||
| void (*SetGlobalRef)(JRIEnv* env, jint op, jglobal a, void* b); | |||
| jbool (*IsSameObject)(JRIEnv* env, jint op, void* a, void* b); | |||
| void* (*NewObject)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...); | |||
| void* (*NewObjectV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c); | |||
| void* (*NewObjectA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c); | |||
| struct java_lang_Class* (*GetObjectClass)(JRIEnv* env, jint op, void* a); | |||
| jbool (*IsInstanceOf)(JRIEnv* env, jint op, void* a, struct java_lang_Class* b); | |||
| jint (*GetMethodID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c); | |||
| void* (*CallMethod)(JRIEnv* env, jint op, void* a, jint b, ...); | |||
| void* (*CallMethodV)(JRIEnv* env, jint op, void* a, jint b, va_list c); | |||
| void* (*CallMethodA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c); | |||
| jbool (*CallMethodBoolean)(JRIEnv* env, jint op, void* a, jint b, ...); | |||
| jbool (*CallMethodBooleanV)(JRIEnv* env, jint op, void* a, jint b, va_list c); | |||
| jbool (*CallMethodBooleanA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c); | |||
| jbyte (*CallMethodByte)(JRIEnv* env, jint op, void* a, jint b, ...); | |||
| jbyte (*CallMethodByteV)(JRIEnv* env, jint op, void* a, jint b, va_list c); | |||
| jbyte (*CallMethodByteA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c); | |||
| jchar (*CallMethodChar)(JRIEnv* env, jint op, void* a, jint b, ...); | |||
| jchar (*CallMethodCharV)(JRIEnv* env, jint op, void* a, jint b, va_list c); | |||
| jchar (*CallMethodCharA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c); | |||
| jshort (*CallMethodShort)(JRIEnv* env, jint op, void* a, jint b, ...); | |||
| jshort (*CallMethodShortV)(JRIEnv* env, jint op, void* a, jint b, va_list c); | |||
| jshort (*CallMethodShortA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c); | |||
| jint (*CallMethodInt)(JRIEnv* env, jint op, void* a, jint b, ...); | |||
| jint (*CallMethodIntV)(JRIEnv* env, jint op, void* a, jint b, va_list c); | |||
| jint (*CallMethodIntA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c); | |||
| jlong (*CallMethodLong)(JRIEnv* env, jint op, void* a, jint b, ...); | |||
| jlong (*CallMethodLongV)(JRIEnv* env, jint op, void* a, jint b, va_list c); | |||
| jlong (*CallMethodLongA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c); | |||
| jfloat (*CallMethodFloat)(JRIEnv* env, jint op, void* a, jint b, ...); | |||
| jfloat (*CallMethodFloatV)(JRIEnv* env, jint op, void* a, jint b, va_list c); | |||
| jfloat (*CallMethodFloatA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c); | |||
| jdouble (*CallMethodDouble)(JRIEnv* env, jint op, void* a, jint b, ...); | |||
| jdouble (*CallMethodDoubleV)(JRIEnv* env, jint op, void* a, jint b, va_list c); | |||
| jdouble (*CallMethodDoubleA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c); | |||
| jint (*GetFieldID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c); | |||
| void* (*GetField)(JRIEnv* env, jint op, void* a, jint b); | |||
| jbool (*GetFieldBoolean)(JRIEnv* env, jint op, void* a, jint b); | |||
| jbyte (*GetFieldByte)(JRIEnv* env, jint op, void* a, jint b); | |||
| jchar (*GetFieldChar)(JRIEnv* env, jint op, void* a, jint b); | |||
| jshort (*GetFieldShort)(JRIEnv* env, jint op, void* a, jint b); | |||
| jint (*GetFieldInt)(JRIEnv* env, jint op, void* a, jint b); | |||
| jlong (*GetFieldLong)(JRIEnv* env, jint op, void* a, jint b); | |||
| jfloat (*GetFieldFloat)(JRIEnv* env, jint op, void* a, jint b); | |||
| jdouble (*GetFieldDouble)(JRIEnv* env, jint op, void* a, jint b); | |||
| void (*SetField)(JRIEnv* env, jint op, void* a, jint b, void* c); | |||
| void (*SetFieldBoolean)(JRIEnv* env, jint op, void* a, jint b, jbool c); | |||
| void (*SetFieldByte)(JRIEnv* env, jint op, void* a, jint b, jbyte c); | |||
| void (*SetFieldChar)(JRIEnv* env, jint op, void* a, jint b, jchar c); | |||
| void (*SetFieldShort)(JRIEnv* env, jint op, void* a, jint b, jshort c); | |||
| void (*SetFieldInt)(JRIEnv* env, jint op, void* a, jint b, jint c); | |||
| void (*SetFieldLong)(JRIEnv* env, jint op, void* a, jint b, jlong c); | |||
| void (*SetFieldFloat)(JRIEnv* env, jint op, void* a, jint b, jfloat c); | |||
| void (*SetFieldDouble)(JRIEnv* env, jint op, void* a, jint b, jdouble c); | |||
| jbool (*IsSubclassOf)(JRIEnv* env, jint op, struct java_lang_Class* a, struct java_lang_Class* b); | |||
| jint (*GetStaticMethodID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c); | |||
| void* (*CallStaticMethod)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...); | |||
| void* (*CallStaticMethodV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c); | |||
| void* (*CallStaticMethodA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c); | |||
| jbool (*CallStaticMethodBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...); | |||
| jbool (*CallStaticMethodBooleanV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c); | |||
| jbool (*CallStaticMethodBooleanA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c); | |||
| jbyte (*CallStaticMethodByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...); | |||
| jbyte (*CallStaticMethodByteV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c); | |||
| jbyte (*CallStaticMethodByteA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c); | |||
| jchar (*CallStaticMethodChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...); | |||
| jchar (*CallStaticMethodCharV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c); | |||
| jchar (*CallStaticMethodCharA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c); | |||
| jshort (*CallStaticMethodShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...); | |||
| jshort (*CallStaticMethodShortV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c); | |||
| jshort (*CallStaticMethodShortA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c); | |||
| jint (*CallStaticMethodInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...); | |||
| jint (*CallStaticMethodIntV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c); | |||
| jint (*CallStaticMethodIntA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c); | |||
| jlong (*CallStaticMethodLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...); | |||
| jlong (*CallStaticMethodLongV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c); | |||
| jlong (*CallStaticMethodLongA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c); | |||
| jfloat (*CallStaticMethodFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...); | |||
| jfloat (*CallStaticMethodFloatV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c); | |||
| jfloat (*CallStaticMethodFloatA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c); | |||
| jdouble (*CallStaticMethodDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...); | |||
| jdouble (*CallStaticMethodDoubleV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c); | |||
| jdouble (*CallStaticMethodDoubleA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c); | |||
| jint (*GetStaticFieldID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c); | |||
| void* (*GetStaticField)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b); | |||
| jbool (*GetStaticFieldBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b); | |||
| jbyte (*GetStaticFieldByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b); | |||
| jchar (*GetStaticFieldChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b); | |||
| jshort (*GetStaticFieldShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b); | |||
| jint (*GetStaticFieldInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b); | |||
| jlong (*GetStaticFieldLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b); | |||
| jfloat (*GetStaticFieldFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b); | |||
| jdouble (*GetStaticFieldDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b); | |||
| void (*SetStaticField)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, void* c); | |||
| void (*SetStaticFieldBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jbool c); | |||
| void (*SetStaticFieldByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jbyte c); | |||
| void (*SetStaticFieldChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jchar c); | |||
| void (*SetStaticFieldShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jshort c); | |||
| void (*SetStaticFieldInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jint c); | |||
| void (*SetStaticFieldLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jlong c); | |||
| void (*SetStaticFieldFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jfloat c); | |||
| void (*SetStaticFieldDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jdouble c); | |||
| struct java_lang_String* (*NewString)(JRIEnv* env, jint op, const jchar* a, jint b); | |||
| jint (*GetStringLength)(JRIEnv* env, jint op, struct java_lang_String* a); | |||
| const jchar* (*GetStringChars)(JRIEnv* env, jint op, struct java_lang_String* a); | |||
| struct java_lang_String* (*NewStringUTF)(JRIEnv* env, jint op, const jbyte* a, jint b); | |||
| jint (*GetStringUTFLength)(JRIEnv* env, jint op, struct java_lang_String* a); | |||
| const jbyte* (*GetStringUTFChars)(JRIEnv* env, jint op, struct java_lang_String* a); | |||
| void* (*NewScalarArray)(JRIEnv* env, jint op, jint a, const char* b, const jbyte* c); | |||
| jint (*GetScalarArrayLength)(JRIEnv* env, jint op, void* a); | |||
| jbyte* (*GetScalarArrayElements)(JRIEnv* env, jint op, void* a); | |||
| void* (*NewObjectArray)(JRIEnv* env, jint op, jint a, struct java_lang_Class* b, void* c); | |||
| jint (*GetObjectArrayLength)(JRIEnv* env, jint op, void* a); | |||
| void* (*GetObjectArrayElement)(JRIEnv* env, jint op, void* a, jint b); | |||
| void (*SetObjectArrayElement)(JRIEnv* env, jint op, void* a, jint b, void* c); | |||
| void (*RegisterNatives)(JRIEnv* env, jint op, struct java_lang_Class* a, char** b, void** c); | |||
| void (*UnregisterNatives)(JRIEnv* env, jint op, struct java_lang_Class* a); | |||
| struct java_lang_Class* (*DefineClass)(JRIEnv* env, jint op, struct java_lang_ClassLoader* a, jbyte* b, jsize bLen); | |||
| struct java_lang_String* (*NewStringPlatform)(JRIEnv* env, jint op, const jbyte* a, jint b, const jbyte* c, jint d); | |||
| const jbyte* (*GetStringPlatformChars)(JRIEnv* env, jint op, struct java_lang_String* a, const jbyte* b, jint c); | |||
| }; | |||
| /* | |||
| ** **************************************************************************** | |||
| ** JRIEnv Operation IDs | |||
| ** *************************************************************************** | |||
| */ | |||
| typedef enum JRIEnvOperations { | |||
| JRI_Reserved0_op, | |||
| JRI_Reserved1_op, | |||
| JRI_Reserved2_op, | |||
| JRI_Reserved3_op, | |||
| JRI_FindClass_op, | |||
| JRI_Throw_op, | |||
| JRI_ThrowNew_op, | |||
| JRI_ExceptionOccurred_op, | |||
| JRI_ExceptionDescribe_op, | |||
| JRI_ExceptionClear_op, | |||
| JRI_NewGlobalRef_op, | |||
| JRI_DisposeGlobalRef_op, | |||
| JRI_GetGlobalRef_op, | |||
| JRI_SetGlobalRef_op, | |||
| JRI_IsSameObject_op, | |||
| JRI_NewObject_op, | |||
| JRI_NewObject_op_va_list, | |||
| JRI_NewObject_op_array, | |||
| JRI_GetObjectClass_op, | |||
| JRI_IsInstanceOf_op, | |||
| JRI_GetMethodID_op, | |||
| JRI_CallMethod_op, | |||
| JRI_CallMethod_op_va_list, | |||
| JRI_CallMethod_op_array, | |||
| JRI_CallMethodBoolean_op, | |||
| JRI_CallMethodBoolean_op_va_list, | |||
| JRI_CallMethodBoolean_op_array, | |||
| JRI_CallMethodByte_op, | |||
| JRI_CallMethodByte_op_va_list, | |||
| JRI_CallMethodByte_op_array, | |||
| JRI_CallMethodChar_op, | |||
| JRI_CallMethodChar_op_va_list, | |||
| JRI_CallMethodChar_op_array, | |||
| JRI_CallMethodShort_op, | |||
| JRI_CallMethodShort_op_va_list, | |||
| JRI_CallMethodShort_op_array, | |||
| JRI_CallMethodInt_op, | |||
| JRI_CallMethodInt_op_va_list, | |||
| JRI_CallMethodInt_op_array, | |||
| JRI_CallMethodLong_op, | |||
| JRI_CallMethodLong_op_va_list, | |||
| JRI_CallMethodLong_op_array, | |||
| JRI_CallMethodFloat_op, | |||
| JRI_CallMethodFloat_op_va_list, | |||
| JRI_CallMethodFloat_op_array, | |||
| JRI_CallMethodDouble_op, | |||
| JRI_CallMethodDouble_op_va_list, | |||
| JRI_CallMethodDouble_op_array, | |||
| JRI_GetFieldID_op, | |||
| JRI_GetField_op, | |||
| JRI_GetFieldBoolean_op, | |||
| JRI_GetFieldByte_op, | |||
| JRI_GetFieldChar_op, | |||
| JRI_GetFieldShort_op, | |||
| JRI_GetFieldInt_op, | |||
| JRI_GetFieldLong_op, | |||
| JRI_GetFieldFloat_op, | |||
| JRI_GetFieldDouble_op, | |||
| JRI_SetField_op, | |||
| JRI_SetFieldBoolean_op, | |||
| JRI_SetFieldByte_op, | |||
| JRI_SetFieldChar_op, | |||
| JRI_SetFieldShort_op, | |||
| JRI_SetFieldInt_op, | |||
| JRI_SetFieldLong_op, | |||
| JRI_SetFieldFloat_op, | |||
| JRI_SetFieldDouble_op, | |||
| JRI_IsSubclassOf_op, | |||
| JRI_GetStaticMethodID_op, | |||
| JRI_CallStaticMethod_op, | |||
| JRI_CallStaticMethod_op_va_list, | |||
| JRI_CallStaticMethod_op_array, | |||
| JRI_CallStaticMethodBoolean_op, | |||
| JRI_CallStaticMethodBoolean_op_va_list, | |||
| JRI_CallStaticMethodBoolean_op_array, | |||
| JRI_CallStaticMethodByte_op, | |||
| JRI_CallStaticMethodByte_op_va_list, | |||
| JRI_CallStaticMethodByte_op_array, | |||
| JRI_CallStaticMethodChar_op, | |||
| JRI_CallStaticMethodChar_op_va_list, | |||
| JRI_CallStaticMethodChar_op_array, | |||
| JRI_CallStaticMethodShort_op, | |||
| JRI_CallStaticMethodShort_op_va_list, | |||
| JRI_CallStaticMethodShort_op_array, | |||
| JRI_CallStaticMethodInt_op, | |||
| JRI_CallStaticMethodInt_op_va_list, | |||
| JRI_CallStaticMethodInt_op_array, | |||
| JRI_CallStaticMethodLong_op, | |||
| JRI_CallStaticMethodLong_op_va_list, | |||
| JRI_CallStaticMethodLong_op_array, | |||
| JRI_CallStaticMethodFloat_op, | |||
| JRI_CallStaticMethodFloat_op_va_list, | |||
| JRI_CallStaticMethodFloat_op_array, | |||
| JRI_CallStaticMethodDouble_op, | |||
| JRI_CallStaticMethodDouble_op_va_list, | |||
| JRI_CallStaticMethodDouble_op_array, | |||
| JRI_GetStaticFieldID_op, | |||
| JRI_GetStaticField_op, | |||
| JRI_GetStaticFieldBoolean_op, | |||
| JRI_GetStaticFieldByte_op, | |||
| JRI_GetStaticFieldChar_op, | |||
| JRI_GetStaticFieldShort_op, | |||
| JRI_GetStaticFieldInt_op, | |||
| JRI_GetStaticFieldLong_op, | |||
| JRI_GetStaticFieldFloat_op, | |||
| JRI_GetStaticFieldDouble_op, | |||
| JRI_SetStaticField_op, | |||
| JRI_SetStaticFieldBoolean_op, | |||
| JRI_SetStaticFieldByte_op, | |||
| JRI_SetStaticFieldChar_op, | |||
| JRI_SetStaticFieldShort_op, | |||
| JRI_SetStaticFieldInt_op, | |||
| JRI_SetStaticFieldLong_op, | |||
| JRI_SetStaticFieldFloat_op, | |||
| JRI_SetStaticFieldDouble_op, | |||
| JRI_NewString_op, | |||
| JRI_GetStringLength_op, | |||
| JRI_GetStringChars_op, | |||
| JRI_NewStringUTF_op, | |||
| JRI_GetStringUTFLength_op, | |||
| JRI_GetStringUTFChars_op, | |||
| JRI_NewScalarArray_op, | |||
| JRI_GetScalarArrayLength_op, | |||
| JRI_GetScalarArrayElements_op, | |||
| JRI_NewObjectArray_op, | |||
| JRI_GetObjectArrayLength_op, | |||
| JRI_GetObjectArrayElement_op, | |||
| JRI_SetObjectArrayElement_op, | |||
| JRI_RegisterNatives_op, | |||
| JRI_UnregisterNatives_op, | |||
| JRI_DefineClass_op, | |||
| JRI_NewStringPlatform_op, | |||
| JRI_GetStringPlatformChars_op | |||
| } JRIEnvOperations; | |||
| #ifdef __cplusplus | |||
| } /* extern "C" */ | |||
| #endif /* __cplusplus */ | |||
| #endif /* JRI_H */ | |||
| /******************************************************************************/ | |||
| @@ -0,0 +1,574 @@ | |||
| /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | |||
| /* ***** BEGIN LICENSE BLOCK ***** | |||
| * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |||
| * | |||
| * The contents of this file are subject to the Mozilla Public License Version | |||
| * 1.1 (the "License"); you may not use this file except in compliance with | |||
| * the License. You may obtain a copy of the License at | |||
| * http://www.mozilla.org/MPL/ | |||
| * | |||
| * Software distributed under the License is distributed on an "AS IS" basis, | |||
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |||
| * for the specific language governing rights and limitations under the | |||
| * License. | |||
| * | |||
| * The Original Code is mozilla.org code. | |||
| * | |||
| * The Initial Developer of the Original Code is | |||
| * Netscape Communications Corporation. | |||
| * Portions created by the Initial Developer are Copyright (C) 1998 | |||
| * the Initial Developer. All Rights Reserved. | |||
| * | |||
| * Contributor(s): | |||
| * | |||
| * Alternatively, the contents of this file may be used under the terms of | |||
| * either the GNU General Public License Version 2 or later (the "GPL"), or | |||
| * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | |||
| * in which case the provisions of the GPL or the LGPL are applicable instead | |||
| * of those above. If you wish to allow use of your version of this file only | |||
| * under the terms of either the GPL or the LGPL, and not to allow others to | |||
| * use your version of this file under the terms of the MPL, indicate your | |||
| * decision by deleting the provisions above and replace them with the notice | |||
| * and other provisions required by the GPL or the LGPL. If you do not delete | |||
| * the provisions above, a recipient may use your version of this file under | |||
| * the terms of any one of the MPL, the GPL or the LGPL. | |||
| * | |||
| * ***** END LICENSE BLOCK ***** */ | |||
| /******************************************************************************* | |||
| * Java Runtime Interface - Machine Dependent Types | |||
| ******************************************************************************/ | |||
| #ifndef JRI_MD_H | |||
| #define JRI_MD_H | |||
| #include <assert.h> | |||
| #include "prtypes.h" /* Needed for HAS_LONG_LONG ifdefs */ | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #endif | |||
| /******************************************************************************* | |||
| * WHAT'S UP WITH THIS FILE? | |||
| * | |||
| * This is where we define the mystical JRI_PUBLIC_API macro that works on all | |||
| * platforms. If you're running with Visual C++, Symantec C, or Borland's | |||
| * development environment on the PC, you're all set. Or if you're on the Mac | |||
| * with Metrowerks, Symantec or MPW with SC you're ok too. For UNIX it shouldn't | |||
| * matter. | |||
| * | |||
| * On UNIX though you probably care about a couple of other symbols though: | |||
| * IS_LITTLE_ENDIAN must be defined for little-endian systems | |||
| * HAVE_LONG_LONG must be defined on systems that have 'long long' integers | |||
| * HAVE_ALIGNED_LONGLONGS must be defined if long-longs must be 8 byte aligned | |||
| * HAVE_ALIGNED_DOUBLES must be defined if doubles must be 8 byte aligned | |||
| * IS_64 must be defined on 64-bit machines (like Dec Alpha) | |||
| ******************************************************************************/ | |||
| /* DLL Entry modifiers... */ | |||
| /* Windows */ | |||
| #if defined(XP_WIN) || defined(_WINDOWS) || defined(WIN32) || defined(_WIN32) | |||
| # include <windows.h> | |||
| # if defined(_MSC_VER) || defined(__GNUC__) | |||
| # if defined(WIN32) || defined(_WIN32) | |||
| # define JRI_PUBLIC_API(ResultType) __declspec(dllexport) ResultType | |||
| # define JRI_PUBLIC_VAR(VarType) VarType | |||
| # define JRI_PUBLIC_VAR_EXP(VarType) __declspec(dllexport) VarType | |||
| # define JRI_PUBLIC_VAR_IMP(VarType) __declspec(dllimport) VarType | |||
| # define JRI_NATIVE_STUB(ResultType) __declspec(dllexport) ResultType | |||
| # define JRI_CALLBACK | |||
| # else /* !_WIN32 */ | |||
| # if defined(_WINDLL) | |||
| # define JRI_PUBLIC_API(ResultType) ResultType __cdecl __export __loadds | |||
| # define JRI_PUBLIC_VAR(VarType) VarType | |||
| # define JRI_PUBLIC_VAR_EXP(VarType) JRI_PUBLIC_VAR(VarType) | |||
| # define JRI_PUBLIC_VAR_IMP(VarType) JRI_PUBLIC_VAR(VarType) | |||
| # define JRI_NATIVE_STUB(ResultType) ResultType __cdecl __loadds | |||
| # define JRI_CALLBACK __loadds | |||
| # else /* !WINDLL */ | |||
| # define JRI_PUBLIC_API(ResultType) ResultType __cdecl __export | |||
| # define JRI_PUBLIC_VAR(VarType) VarType | |||
| # define JRI_PUBLIC_VAR_EXP(VarType) JRI_PUBLIC_VAR(VarType) | |||
| # define JRI_PUBLIC_VAR_IMP(VarType) JRI_PUBLIC_VAR(VarType) | |||
| # define JRI_NATIVE_STUB(ResultType) ResultType __cdecl __export | |||
| # define JRI_CALLBACK __export | |||
| # endif /* !WINDLL */ | |||
| # endif /* !_WIN32 */ | |||
| # elif defined(__BORLANDC__) | |||
| # if defined(WIN32) || defined(_WIN32) | |||
| # define JRI_PUBLIC_API(ResultType) __export ResultType | |||
| # define JRI_PUBLIC_VAR(VarType) VarType | |||
| # define JRI_PUBLIC_VAR_EXP(VarType) __export VarType | |||
| # define JRI_PUBLIC_VAR_IMP(VarType) __import VarType | |||
| # define JRI_NATIVE_STUB(ResultType) __export ResultType | |||
| # define JRI_CALLBACK | |||
| # else /* !_WIN32 */ | |||
| # define JRI_PUBLIC_API(ResultType) ResultType _cdecl _export _loadds | |||
| # define JRI_PUBLIC_VAR(VarType) VarType | |||
| # define JRI_PUBLIC_VAR_EXP(VarType) __cdecl __export VarType | |||
| # define JRI_PUBLIC_VAR_IMP(VarType) __cdecl __import VarType | |||
| # define JRI_NATIVE_STUB(ResultType) ResultType _cdecl _loadds | |||
| # define JRI_CALLBACK _loadds | |||
| # endif | |||
| # else | |||
| # error Unsupported PC development environment. | |||
| # endif | |||
| # ifndef IS_LITTLE_ENDIAN | |||
| # define IS_LITTLE_ENDIAN | |||
| # endif | |||
| /* OS/2 */ | |||
| #elif defined(XP_OS2) | |||
| # ifdef XP_OS2_VACPP | |||
| # define JRI_PUBLIC_API(ResultType) ResultType _Optlink | |||
| # define JRI_PUBLIC_VAR(VarType) VarType | |||
| # define JRI_CALLBACK | |||
| # elif defined(__declspec) | |||
| # define JRI_PUBLIC_API(ResultType) __declspec(dllexport) ResultType | |||
| # define JRI_PUBLIC_VAR(VarType) VarType | |||
| # define JRI_PUBLIC_VAR_EXP(VarType) __declspec(dllexport) VarType | |||
| # define JRI_PUBLIC_VAR_IMP(VarType) __declspec(dllimport) VarType | |||
| # define JRI_NATIVE_STUB(ResultType) __declspec(dllexport) ResultType | |||
| # define JRI_CALLBACK | |||
| # else | |||
| # define JRI_PUBLIC_API(ResultType) ResultType | |||
| # define JRI_PUBLIC_VAR(VarType) VarType | |||
| # define JRI_CALLBACK | |||
| # endif | |||
| /* Mac */ | |||
| #elif defined (macintosh) || Macintosh || THINK_C | |||
| # if defined(__MWERKS__) /* Metrowerks */ | |||
| # if !__option(enumsalwaysint) | |||
| # error You need to define 'Enums Always Int' for your project. | |||
| # endif | |||
| # if defined(TARGET_CPU_68K) && !TARGET_RT_MAC_CFM | |||
| # if !__option(fourbyteints) | |||
| # error You need to define 'Struct Alignment: 68k' for your project. | |||
| # endif | |||
| # endif /* !GENERATINGCFM */ | |||
| # define JRI_PUBLIC_API(ResultType) __declspec(export) ResultType | |||
| # define JRI_PUBLIC_VAR(VarType) JRI_PUBLIC_API(VarType) | |||
| # define JRI_PUBLIC_VAR_EXP(VarType) JRI_PUBLIC_API(VarType) | |||
| # define JRI_PUBLIC_VAR_IMP(VarType) JRI_PUBLIC_API(VarType) | |||
| # define JRI_NATIVE_STUB(ResultType) JRI_PUBLIC_API(ResultType) | |||
| # elif defined(__SC__) /* Symantec */ | |||
| # error What are the Symantec defines? (warren@netscape.com) | |||
| # elif macintosh && applec /* MPW */ | |||
| # error Please upgrade to the latest MPW compiler (SC). | |||
| # else | |||
| # error Unsupported Mac development environment. | |||
| # endif | |||
| # define JRI_CALLBACK | |||
| /* Unix or else */ | |||
| #else | |||
| # define JRI_PUBLIC_API(ResultType) ResultType | |||
| # define JRI_PUBLIC_VAR(VarType) VarType | |||
| # define JRI_PUBLIC_VAR_EXP(VarType) JRI_PUBLIC_VAR(VarType) | |||
| # define JRI_PUBLIC_VAR_IMP(VarType) JRI_PUBLIC_VAR(VarType) | |||
| # define JRI_NATIVE_STUB(ResultType) ResultType | |||
| # define JRI_CALLBACK | |||
| #endif | |||
| #ifndef FAR /* for non-Win16 */ | |||
| #define FAR | |||
| #endif | |||
| /******************************************************************************/ | |||
| /* Java Scalar Types */ | |||
| #if 0 /* now in jni.h */ | |||
| typedef short jchar; | |||
| typedef short jshort; | |||
| typedef float jfloat; | |||
| typedef double jdouble; | |||
| typedef juint jsize; | |||
| #endif | |||
| /* moved from jni.h -- Sun's new jni.h doesn't have this anymore */ | |||
| #ifdef __cplusplus | |||
| typedef class _jobject *jref; | |||
| #else | |||
| typedef struct _jobject *jref; | |||
| #endif | |||
| typedef unsigned char jbool; | |||
| typedef signed char jbyte; | |||
| #ifdef IS_64 /* XXX ok for alpha, but not right on all 64-bit architectures */ | |||
| typedef unsigned int juint; | |||
| typedef int jint; | |||
| #else | |||
| typedef unsigned long juint; | |||
| typedef long jint; | |||
| #endif | |||
| /******************************************************************************* | |||
| * jlong : long long (64-bit signed integer type) support. | |||
| ******************************************************************************/ | |||
| /* | |||
| ** Bit masking macros. (n must be <= 31 to be portable) | |||
| */ | |||
| #define JRI_BIT(n) ((juint)1 << (n)) | |||
| #define JRI_BITMASK(n) (JRI_BIT(n) - 1) | |||
| #ifdef HAVE_LONG_LONG | |||
| #ifdef OSF1 | |||
| /* long is default 64-bit on OSF1, -std1 does not allow long long */ | |||
| typedef long jlong; | |||
| typedef unsigned long julong; | |||
| #define jlong_MAXINT 0x7fffffffffffffffL | |||
| #define jlong_MININT 0x8000000000000000L | |||
| #define jlong_ZERO 0x0L | |||
| #elif (defined(WIN32) || defined(_WIN32)) | |||
| typedef LONGLONG jlong; | |||
| typedef DWORDLONG julong; | |||
| #define jlong_MAXINT 0x7fffffffffffffffi64 | |||
| #define jlong_MININT 0x8000000000000000i64 | |||
| #define jlong_ZERO 0x0i64 | |||
| #else | |||
| typedef long long jlong; | |||
| typedef unsigned long long julong; | |||
| #define jlong_MAXINT 0x7fffffffffffffffLL | |||
| #define jlong_MININT 0x8000000000000000LL | |||
| #define jlong_ZERO 0x0LL | |||
| #endif | |||
| #define jlong_IS_ZERO(a) ((a) == 0) | |||
| #define jlong_EQ(a, b) ((a) == (b)) | |||
| #define jlong_NE(a, b) ((a) != (b)) | |||
| #define jlong_GE_ZERO(a) ((a) >= 0) | |||
| #define jlong_CMP(a, op, b) ((a) op (b)) | |||
| #define jlong_AND(r, a, b) ((r) = (a) & (b)) | |||
| #define jlong_OR(r, a, b) ((r) = (a) | (b)) | |||
| #define jlong_XOR(r, a, b) ((r) = (a) ^ (b)) | |||
| #define jlong_OR2(r, a) ((r) = (r) | (a)) | |||
| #define jlong_NOT(r, a) ((r) = ~(a)) | |||
| #define jlong_NEG(r, a) ((r) = -(a)) | |||
| #define jlong_ADD(r, a, b) ((r) = (a) + (b)) | |||
| #define jlong_SUB(r, a, b) ((r) = (a) - (b)) | |||
| #define jlong_MUL(r, a, b) ((r) = (a) * (b)) | |||
| #define jlong_DIV(r, a, b) ((r) = (a) / (b)) | |||
| #define jlong_MOD(r, a, b) ((r) = (a) % (b)) | |||
| #define jlong_SHL(r, a, b) ((r) = (a) << (b)) | |||
| #define jlong_SHR(r, a, b) ((r) = (a) >> (b)) | |||
| #define jlong_USHR(r, a, b) ((r) = (julong)(a) >> (b)) | |||
| #define jlong_ISHL(r, a, b) ((r) = ((jlong)(a)) << (b)) | |||
| #define jlong_L2I(i, l) ((i) = (int)(l)) | |||
| #define jlong_L2UI(ui, l) ((ui) =(unsigned int)(l)) | |||
| #define jlong_L2F(f, l) ((f) = (l)) | |||
| #define jlong_L2D(d, l) ((d) = (l)) | |||
| #define jlong_I2L(l, i) ((l) = (i)) | |||
| #define jlong_UI2L(l, ui) ((l) = (ui)) | |||
| #define jlong_F2L(l, f) ((l) = (f)) | |||
| #define jlong_D2L(l, d) ((l) = (d)) | |||
| #define jlong_UDIVMOD(qp, rp, a, b) \ | |||
| (*(qp) = ((julong)(a) / (b)), \ | |||
| *(rp) = ((julong)(a) % (b))) | |||
| #else /* !HAVE_LONG_LONG */ | |||
| typedef struct { | |||
| #ifdef IS_LITTLE_ENDIAN | |||
| juint lo, hi; | |||
| #else | |||
| juint hi, lo; | |||
| #endif | |||
| } jlong; | |||
| typedef jlong julong; | |||
| extern jlong jlong_MAXINT, jlong_MININT, jlong_ZERO; | |||
| #define jlong_IS_ZERO(a) (((a).hi == 0) && ((a).lo == 0)) | |||
| #define jlong_EQ(a, b) (((a).hi == (b).hi) && ((a).lo == (b).lo)) | |||
| #define jlong_NE(a, b) (((a).hi != (b).hi) || ((a).lo != (b).lo)) | |||
| #define jlong_GE_ZERO(a) (((a).hi >> 31) == 0) | |||
| /* | |||
| * NB: jlong_CMP and jlong_UCMP work only for strict relationals (<, >). | |||
| */ | |||
| #define jlong_CMP(a, op, b) (((int32)(a).hi op (int32)(b).hi) || \ | |||
| (((a).hi == (b).hi) && ((a).lo op (b).lo))) | |||
| #define jlong_UCMP(a, op, b) (((a).hi op (b).hi) || \ | |||
| (((a).hi == (b).hi) && ((a).lo op (b).lo))) | |||
| #define jlong_AND(r, a, b) ((r).lo = (a).lo & (b).lo, \ | |||
| (r).hi = (a).hi & (b).hi) | |||
| #define jlong_OR(r, a, b) ((r).lo = (a).lo | (b).lo, \ | |||
| (r).hi = (a).hi | (b).hi) | |||
| #define jlong_XOR(r, a, b) ((r).lo = (a).lo ^ (b).lo, \ | |||
| (r).hi = (a).hi ^ (b).hi) | |||
| #define jlong_OR2(r, a) ((r).lo = (r).lo | (a).lo, \ | |||
| (r).hi = (r).hi | (a).hi) | |||
| #define jlong_NOT(r, a) ((r).lo = ~(a).lo, \ | |||
| (r).hi = ~(a).hi) | |||
| #define jlong_NEG(r, a) ((r).lo = -(int32)(a).lo, \ | |||
| (r).hi = -(int32)(a).hi - ((r).lo != 0)) | |||
| #define jlong_ADD(r, a, b) { \ | |||
| jlong _a, _b; \ | |||
| _a = a; _b = b; \ | |||
| (r).lo = _a.lo + _b.lo; \ | |||
| (r).hi = _a.hi + _b.hi + ((r).lo < _b.lo); \ | |||
| } | |||
| #define jlong_SUB(r, a, b) { \ | |||
| jlong _a, _b; \ | |||
| _a = a; _b = b; \ | |||
| (r).lo = _a.lo - _b.lo; \ | |||
| (r).hi = _a.hi - _b.hi - (_a.lo < _b.lo); \ | |||
| } \ | |||
| /* | |||
| * Multiply 64-bit operands a and b to get 64-bit result r. | |||
| * First multiply the low 32 bits of a and b to get a 64-bit result in r. | |||
| * Then add the outer and inner products to r.hi. | |||
| */ | |||
| #define jlong_MUL(r, a, b) { \ | |||
| jlong _a, _b; \ | |||
| _a = a; _b = b; \ | |||
| jlong_MUL32(r, _a.lo, _b.lo); \ | |||
| (r).hi += _a.hi * _b.lo + _a.lo * _b.hi; \ | |||
| } | |||
| /* XXX _jlong_lo16(a) = ((a) << 16 >> 16) is better on some archs (not on mips) */ | |||
| #define _jlong_lo16(a) ((a) & JRI_BITMASK(16)) | |||
| #define _jlong_hi16(a) ((a) >> 16) | |||
| /* | |||
| * Multiply 32-bit operands a and b to get 64-bit result r. | |||
| * Use polynomial expansion based on primitive field element (1 << 16). | |||
| */ | |||
| #define jlong_MUL32(r, a, b) { \ | |||
| juint _a1, _a0, _b1, _b0, _y0, _y1, _y2, _y3; \ | |||
| _a1 = _jlong_hi16(a), _a0 = _jlong_lo16(a); \ | |||
| _b1 = _jlong_hi16(b), _b0 = _jlong_lo16(b); \ | |||
| _y0 = _a0 * _b0; \ | |||
| _y1 = _a0 * _b1; \ | |||
| _y2 = _a1 * _b0; \ | |||
| _y3 = _a1 * _b1; \ | |||
| _y1 += _jlong_hi16(_y0); /* can't carry */ \ | |||
| _y1 += _y2; /* might carry */ \ | |||
| if (_y1 < _y2) _y3 += 1 << 16; /* propagate */ \ | |||
| (r).lo = (_jlong_lo16(_y1) << 16) + _jlong_lo16(_y0); \ | |||
| (r).hi = _y3 + _jlong_hi16(_y1); \ | |||
| } | |||
| /* | |||
| * Divide 64-bit unsigned operand a by 64-bit unsigned operand b, setting *qp | |||
| * to the 64-bit unsigned quotient, and *rp to the 64-bit unsigned remainder. | |||
| * Minimize effort if one of qp and rp is null. | |||
| */ | |||
| #define jlong_UDIVMOD(qp, rp, a, b) jlong_udivmod(qp, rp, a, b) | |||
| extern JRI_PUBLIC_API(void) | |||
| jlong_udivmod(julong *qp, julong *rp, julong a, julong b); | |||
| #define jlong_DIV(r, a, b) { \ | |||
| jlong _a, _b; \ | |||
| juint _negative = (int32)(a).hi < 0; \ | |||
| if (_negative) { \ | |||
| jlong_NEG(_a, a); \ | |||
| } else { \ | |||
| _a = a; \ | |||
| } \ | |||
| if ((int32)(b).hi < 0) { \ | |||
| _negative ^= 1; \ | |||
| jlong_NEG(_b, b); \ | |||
| } else { \ | |||
| _b = b; \ | |||
| } \ | |||
| jlong_UDIVMOD(&(r), 0, _a, _b); \ | |||
| if (_negative) \ | |||
| jlong_NEG(r, r); \ | |||
| } | |||
| #define jlong_MOD(r, a, b) { \ | |||
| jlong _a, _b; \ | |||
| juint _negative = (int32)(a).hi < 0; \ | |||
| if (_negative) { \ | |||
| jlong_NEG(_a, a); \ | |||
| } else { \ | |||
| _a = a; \ | |||
| } \ | |||
| if ((int32)(b).hi < 0) { \ | |||
| jlong_NEG(_b, b); \ | |||
| } else { \ | |||
| _b = b; \ | |||
| } \ | |||
| jlong_UDIVMOD(0, &(r), _a, _b); \ | |||
| if (_negative) \ | |||
| jlong_NEG(r, r); \ | |||
| } | |||
| /* | |||
| * NB: b is a juint, not jlong or julong, for the shift ops. | |||
| */ | |||
| #define jlong_SHL(r, a, b) { \ | |||
| if (b) { \ | |||
| jlong _a; \ | |||
| _a = a; \ | |||
| if ((b) < 32) { \ | |||
| (r).lo = _a.lo << (b); \ | |||
| (r).hi = (_a.hi << (b)) | (_a.lo >> (32 - (b))); \ | |||
| } else { \ | |||
| (r).lo = 0; \ | |||
| (r).hi = _a.lo << ((b) & 31); \ | |||
| } \ | |||
| } else { \ | |||
| (r) = (a); \ | |||
| } \ | |||
| } | |||
| /* a is an int32, b is int32, r is jlong */ | |||
| #define jlong_ISHL(r, a, b) { \ | |||
| if (b) { \ | |||
| jlong _a; \ | |||
| _a.lo = (a); \ | |||
| _a.hi = 0; \ | |||
| if ((b) < 32) { \ | |||
| (r).lo = (a) << (b); \ | |||
| (r).hi = ((a) >> (32 - (b))); \ | |||
| } else { \ | |||
| (r).lo = 0; \ | |||
| (r).hi = (a) << ((b) & 31); \ | |||
| } \ | |||
| } else { \ | |||
| (r).lo = (a); \ | |||
| (r).hi = 0; \ | |||
| } \ | |||
| } | |||
| #define jlong_SHR(r, a, b) { \ | |||
| if (b) { \ | |||
| jlong _a; \ | |||
| _a = a; \ | |||
| if ((b) < 32) { \ | |||
| (r).lo = (_a.hi << (32 - (b))) | (_a.lo >> (b)); \ | |||
| (r).hi = (int32)_a.hi >> (b); \ | |||
| } else { \ | |||
| (r).lo = (int32)_a.hi >> ((b) & 31); \ | |||
| (r).hi = (int32)_a.hi >> 31; \ | |||
| } \ | |||
| } else { \ | |||
| (r) = (a); \ | |||
| } \ | |||
| } | |||
| #define jlong_USHR(r, a, b) { \ | |||
| if (b) { \ | |||
| jlong _a; \ | |||
| _a = a; \ | |||
| if ((b) < 32) { \ | |||
| (r).lo = (_a.hi << (32 - (b))) | (_a.lo >> (b)); \ | |||
| (r).hi = _a.hi >> (b); \ | |||
| } else { \ | |||
| (r).lo = _a.hi >> ((b) & 31); \ | |||
| (r).hi = 0; \ | |||
| } \ | |||
| } else { \ | |||
| (r) = (a); \ | |||
| } \ | |||
| } | |||
| #define jlong_L2I(i, l) ((i) = (l).lo) | |||
| #define jlong_L2UI(ui, l) ((ui) = (l).lo) | |||
| #define jlong_L2F(f, l) { double _d; jlong_L2D(_d, l); (f) = (float) _d; } | |||
| #define jlong_L2D(d, l) { \ | |||
| int32 _negative; \ | |||
| jlong _absval; \ | |||
| \ | |||
| _negative = (l).hi >> 31; \ | |||
| if (_negative) { \ | |||
| jlong_NEG(_absval, l); \ | |||
| } else { \ | |||
| _absval = l; \ | |||
| } \ | |||
| (d) = (double)_absval.hi * 4.294967296e9 + _absval.lo; \ | |||
| if (_negative) \ | |||
| (d) = -(d); \ | |||
| } | |||
| #define jlong_I2L(l, i) ((l).hi = (i) >> 31, (l).lo = (i)) | |||
| #define jlong_UI2L(l, ui) ((l).hi = 0, (l).lo = (ui)) | |||
| #define jlong_F2L(l, f) { double _d = (double) f; jlong_D2L(l, _d); } | |||
| #define jlong_D2L(l, d) { \ | |||
| int _negative; \ | |||
| double _absval, _d_hi; \ | |||
| jlong _lo_d; \ | |||
| \ | |||
| _negative = ((d) < 0); \ | |||
| _absval = _negative ? -(d) : (d); \ | |||
| \ | |||
| (l).hi = (juint)(_absval / 4.294967296e9); \ | |||
| (l).lo = 0; \ | |||
| jlong_L2D(_d_hi, l); \ | |||
| _absval -= _d_hi; \ | |||
| _lo_d.hi = 0; \ | |||
| if (_absval < 0) { \ | |||
| _lo_d.lo = (juint) -_absval; \ | |||
| jlong_SUB(l, l, _lo_d); \ | |||
| } else { \ | |||
| _lo_d.lo = (juint) _absval; \ | |||
| jlong_ADD(l, l, _lo_d); \ | |||
| } \ | |||
| \ | |||
| if (_negative) \ | |||
| jlong_NEG(l, l); \ | |||
| } | |||
| #endif /* !HAVE_LONG_LONG */ | |||
| /******************************************************************************/ | |||
| #ifdef HAVE_ALIGNED_LONGLONGS | |||
| #define JRI_GET_INT64(_t,_addr) ( ((_t).x[0] = ((jint*)(_addr))[0]), \ | |||
| ((_t).x[1] = ((jint*)(_addr))[1]), \ | |||
| (_t).l ) | |||
| #define JRI_SET_INT64(_t, _addr, _v) ( (_t).l = (_v), \ | |||
| ((jint*)(_addr))[0] = (_t).x[0], \ | |||
| ((jint*)(_addr))[1] = (_t).x[1] ) | |||
| #else | |||
| #define JRI_GET_INT64(_t,_addr) (*(jlong*)(_addr)) | |||
| #define JRI_SET_INT64(_t, _addr, _v) (*(jlong*)(_addr) = (_v)) | |||
| #endif | |||
| /* If double's must be aligned on doubleword boundaries then define this */ | |||
| #ifdef HAVE_ALIGNED_DOUBLES | |||
| #define JRI_GET_DOUBLE(_t,_addr) ( ((_t).x[0] = ((jint*)(_addr))[0]), \ | |||
| ((_t).x[1] = ((jint*)(_addr))[1]), \ | |||
| (_t).d ) | |||
| #define JRI_SET_DOUBLE(_t, _addr, _v) ( (_t).d = (_v), \ | |||
| ((jint*)(_addr))[0] = (_t).x[0], \ | |||
| ((jint*)(_addr))[1] = (_t).x[1] ) | |||
| #else | |||
| #define JRI_GET_DOUBLE(_t,_addr) (*(jdouble*)(_addr)) | |||
| #define JRI_SET_DOUBLE(_t, _addr, _v) (*(jdouble*)(_addr) = (_v)) | |||
| #endif | |||
| /******************************************************************************/ | |||
| #ifdef __cplusplus | |||
| } | |||
| #endif | |||
| #endif /* JRI_MD_H */ | |||
| /******************************************************************************/ | |||
| @@ -0,0 +1,243 @@ | |||
| /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | |||
| /* ***** BEGIN LICENSE BLOCK ***** | |||
| * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |||
| * | |||
| * The contents of this file are subject to the Mozilla Public License Version | |||
| * 1.1 (the "License"); you may not use this file except in compliance with | |||
| * the License. You may obtain a copy of the License at | |||
| * http://www.mozilla.org/MPL/ | |||
| * | |||
| * Software distributed under the License is distributed on an "AS IS" basis, | |||
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |||
| * for the specific language governing rights and limitations under the | |||
| * License. | |||
| * | |||
| * The Original Code is mozilla.org code. | |||
| * | |||
| * The Initial Developer of the Original Code is | |||
| * Netscape Communications Corporation. | |||
| * Portions created by the Initial Developer are Copyright (C) 1998 | |||
| * the Initial Developer. All Rights Reserved. | |||
| * | |||
| * Contributor(s): | |||
| * | |||
| * Alternatively, the contents of this file may be used under the terms of | |||
| * either the GNU General Public License Version 2 or later (the "GPL"), or | |||
| * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | |||
| * in which case the provisions of the GPL or the LGPL are applicable instead | |||
| * of those above. If you wish to allow use of your version of this file only | |||
| * under the terms of either the GPL or the LGPL, and not to allow others to | |||
| * use your version of this file under the terms of the MPL, indicate your | |||
| * decision by deleting the provisions above and replace them with the notice | |||
| * and other provisions required by the GPL or the LGPL. If you do not delete | |||
| * the provisions above, a recipient may use your version of this file under | |||
| * the terms of any one of the MPL, the GPL or the LGPL. | |||
| * | |||
| * ***** END LICENSE BLOCK ***** */ | |||
| /******************************************************************************* | |||
| * Java Runtime Interface | |||
| ******************************************************************************/ | |||
| #ifndef JRITYPES_H | |||
| #define JRITYPES_H | |||
| #include "jri_md.h" | |||
| #include "jni.h" | |||
| #include <stddef.h> | |||
| #include <stdlib.h> | |||
| #include <stdarg.h> | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #endif | |||
| /******************************************************************************* | |||
| * Types | |||
| ******************************************************************************/ | |||
| struct JRIEnvInterface; | |||
| typedef void* JRIRef; | |||
| typedef void* JRIGlobalRef; | |||
| typedef jint JRIFieldID; | |||
| typedef jint JRIMethodID; | |||
| /* synonyms: */ | |||
| typedef JRIGlobalRef jglobal; | |||
| typedef union JRIValue { | |||
| jbool z; | |||
| jbyte b; | |||
| jchar c; | |||
| jshort s; | |||
| jint i; | |||
| jlong l; | |||
| jfloat f; | |||
| jdouble d; | |||
| jref r; | |||
| } JRIValue; | |||
| typedef enum JRIBoolean { | |||
| JRIFalse = 0, | |||
| JRITrue = 1 | |||
| } JRIBoolean; | |||
| typedef enum JRIConstant { | |||
| JRIUninitialized = -1 | |||
| } JRIConstant; | |||
| /* convenience types (these must be distinct struct types for c++ overloading): */ | |||
| #if 0 /* now in jni.h */ | |||
| typedef struct jbooleanArrayStruct* jbooleanArray; | |||
| typedef struct jbyteArrayStruct* jbyteArray; | |||
| typedef struct jcharArrayStruct* jcharArray; | |||
| typedef struct jshortArrayStruct* jshortArray; | |||
| typedef struct jintArrayStruct* jintArray; | |||
| typedef struct jlongArrayStruct* jlongArray; | |||
| typedef struct jfloatArrayStruct* jfloatArray; | |||
| typedef struct jdoubleArrayStruct* jdoubleArray; | |||
| typedef struct jobjectArrayStruct* jobjectArray; | |||
| #endif | |||
| typedef struct jstringArrayStruct* jstringArray; | |||
| typedef struct jarrayArrayStruct* jarrayArray; | |||
| #define JRIConstructorMethodName "<init>" | |||
| /******************************************************************************* | |||
| * Signature Construction Macros | |||
| ******************************************************************************/ | |||
| /* | |||
| ** These macros can be used to construct signature strings. Hopefully their names | |||
| ** are a little easier to remember than the single character they correspond to. | |||
| ** For example, to specify the signature of the method: | |||
| ** | |||
| ** public int read(byte b[], int off, int len); | |||
| ** | |||
| ** you could write something like this in C: | |||
| ** | |||
| ** char* readSig = JRISigMethod(JRISigArray(JRISigByte) | |||
| ** JRISigInt | |||
| ** JRISigInt) JRISigInt; | |||
| ** | |||
| ** Of course, don't put commas between the types. | |||
| */ | |||
| #define JRISigArray(T) "[" T | |||
| #define JRISigByte "B" | |||
| #define JRISigChar "C" | |||
| #define JRISigClass(name) "L" name ";" | |||
| #define JRISigFloat "F" | |||
| #define JRISigDouble "D" | |||
| #define JRISigMethod(args) "(" args ")" | |||
| #define JRISigNoArgs "" | |||
| #define JRISigInt "I" | |||
| #define JRISigLong "J" | |||
| #define JRISigShort "S" | |||
| #define JRISigVoid "V" | |||
| #define JRISigBoolean "Z" | |||
| /******************************************************************************* | |||
| * Environments | |||
| ******************************************************************************/ | |||
| extern JRI_PUBLIC_API(const struct JRIEnvInterface**) | |||
| JRI_GetCurrentEnv(void); | |||
| /******************************************************************************* | |||
| * Specific Scalar Array Types | |||
| ******************************************************************************/ | |||
| /* | |||
| ** The JRI Native Method Interface does not support boolean arrays. This | |||
| ** is to allow Java runtime implementations to optimize boolean array | |||
| ** storage. Using the ScalarArray operations on boolean arrays is bound | |||
| ** to fail, so convert any boolean arrays to byte arrays in Java before | |||
| ** passing them to a native method. | |||
| */ | |||
| #define JRI_NewByteArray(env, length, initialValues) \ | |||
| JRI_NewScalarArray(env, length, JRISigByte, (jbyte*)(initialValues)) | |||
| #define JRI_GetByteArrayLength(env, array) \ | |||
| JRI_GetScalarArrayLength(env, array) | |||
| #define JRI_GetByteArrayElements(env, array) \ | |||
| JRI_GetScalarArrayElements(env, array) | |||
| #define JRI_NewCharArray(env, length, initialValues) \ | |||
| JRI_NewScalarArray(env, ((length) * sizeof(jchar)), JRISigChar, (jbyte*)(initialValues)) | |||
| #define JRI_GetCharArrayLength(env, array) \ | |||
| JRI_GetScalarArrayLength(env, array) | |||
| #define JRI_GetCharArrayElements(env, array) \ | |||
| ((jchar*)JRI_GetScalarArrayElements(env, array)) | |||
| #define JRI_NewShortArray(env, length, initialValues) \ | |||
| JRI_NewScalarArray(env, ((length) * sizeof(jshort)), JRISigShort, (jbyte*)(initialValues)) | |||
| #define JRI_GetShortArrayLength(env, array) \ | |||
| JRI_GetScalarArrayLength(env, array) | |||
| #define JRI_GetShortArrayElements(env, array) \ | |||
| ((jshort*)JRI_GetScalarArrayElements(env, array)) | |||
| #define JRI_NewIntArray(env, length, initialValues) \ | |||
| JRI_NewScalarArray(env, ((length) * sizeof(jint)), JRISigInt, (jbyte*)(initialValues)) | |||
| #define JRI_GetIntArrayLength(env, array) \ | |||
| JRI_GetScalarArrayLength(env, array) | |||
| #define JRI_GetIntArrayElements(env, array) \ | |||
| ((jint*)JRI_GetScalarArrayElements(env, array)) | |||
| #define JRI_NewLongArray(env, length, initialValues) \ | |||
| JRI_NewScalarArray(env, ((length) * sizeof(jlong)), JRISigLong, (jbyte*)(initialValues)) | |||
| #define JRI_GetLongArrayLength(env, array) \ | |||
| JRI_GetScalarArrayLength(env, array) | |||
| #define JRI_GetLongArrayElements(env, array) \ | |||
| ((jlong*)JRI_GetScalarArrayElements(env, array)) | |||
| #define JRI_NewFloatArray(env, length, initialValues) \ | |||
| JRI_NewScalarArray(env, ((length) * sizeof(jfloat)), JRISigFloat, (jbyte*)(initialValues)) | |||
| #define JRI_GetFloatArrayLength(env, array) \ | |||
| JRI_GetScalarArrayLength(env, array) | |||
| #define JRI_GetFloatArrayElements(env, array) \ | |||
| ((jfloat*)JRI_GetScalarArrayElements(env, array)) | |||
| #define JRI_NewDoubleArray(env, length, initialValues) \ | |||
| JRI_NewScalarArray(env, ((length) * sizeof(jdouble)), JRISigDouble, (jbyte*)(initialValues)) | |||
| #define JRI_GetDoubleArrayLength(env, array) \ | |||
| JRI_GetScalarArrayLength(env, array) | |||
| #define JRI_GetDoubleArrayElements(env, array) \ | |||
| ((jdouble*)JRI_GetScalarArrayElements(env, array)) | |||
| /******************************************************************************/ | |||
| /* | |||
| ** JDK Stuff -- This stuff is still needed while we're using the JDK | |||
| ** dynamic linking strategy to call native methods. | |||
| */ | |||
| typedef union JRI_JDK_stack_item { | |||
| /* Non pointer items */ | |||
| jint i; | |||
| jfloat f; | |||
| jint o; | |||
| /* Pointer items */ | |||
| void *h; | |||
| void *p; | |||
| unsigned char *addr; | |||
| #ifdef IS_64 | |||
| double d; | |||
| long l; /* == 64bits! */ | |||
| #endif | |||
| } JRI_JDK_stack_item; | |||
| typedef union JRI_JDK_Java8Str { | |||
| jint x[2]; | |||
| jdouble d; | |||
| jlong l; | |||
| void *p; | |||
| float f; | |||
| } JRI_JDK_Java8; | |||
| /******************************************************************************/ | |||
| #ifdef __cplusplus | |||
| } | |||
| #endif | |||
| #endif /* JRITYPES_H */ | |||
| /******************************************************************************/ | |||
| @@ -0,0 +1,766 @@ | |||
| /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | |||
| /* ***** BEGIN LICENSE BLOCK ***** | |||
| * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |||
| * | |||
| * The contents of this file are subject to the Mozilla Public License Version | |||
| * 1.1 (the "License"); you may not use this file except in compliance with | |||
| * the License. You may obtain a copy of the License at | |||
| * http://www.mozilla.org/MPL/ | |||
| * | |||
| * Software distributed under the License is distributed on an "AS IS" basis, | |||
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |||
| * for the specific language governing rights and limitations under the | |||
| * License. | |||
| * | |||
| * The Original Code is mozilla.org code. | |||
| * | |||
| * The Initial Developer of the Original Code is | |||
| * Netscape Communications Corporation. | |||
| * Portions created by the Initial Developer are Copyright (C) 1998 | |||
| * the Initial Developer. All Rights Reserved. | |||
| * | |||
| * Contributor(s): | |||
| * | |||
| * Alternatively, the contents of this file may be used under the terms of | |||
| * either the GNU General Public License Version 2 or later (the "GPL"), or | |||
| * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | |||
| * in which case the provisions of the GPL or the LGPL are applicable instead | |||
| * of those above. If you wish to allow use of your version of this file only | |||
| * under the terms of either the GPL or the LGPL, and not to allow others to | |||
| * use your version of this file under the terms of the MPL, indicate your | |||
| * decision by deleting the provisions above and replace them with the notice | |||
| * and other provisions required by the GPL or the LGPL. If you do not delete | |||
| * the provisions above, a recipient may use your version of this file under | |||
| * the terms of any one of the MPL, the GPL or the LGPL. | |||
| * | |||
| * ***** END LICENSE BLOCK ***** */ | |||
| /* | |||
| * npapi.h $Revision: 3.48 $ | |||
| * Netscape client plug-in API spec | |||
| */ | |||
| #ifndef _NPAPI_H_ | |||
| #define _NPAPI_H_ | |||
| #ifdef __OS2__ | |||
| #pragma pack(1) | |||
| #endif | |||
| #include "prtypes.h" | |||
| /* Copied from xp_core.h */ | |||
| /* removed #ifdef for hpux defined in /usr/include/model.h */ | |||
| #ifndef _INT16 | |||
| #define _INT16 | |||
| #endif | |||
| #ifndef _INT32 | |||
| #define _INT32 | |||
| #endif | |||
| #ifndef _UINT16 | |||
| #define _UINT16 | |||
| #endif | |||
| #ifndef _UINT32 | |||
| #define _UINT32 | |||
| #endif | |||
| /* | |||
| * NO_NSPR_10_SUPPORT disables the inclusion | |||
| * of obsolete/protypes.h, whose int16, uint16, | |||
| * int32, and uint32 typedefs conflict with those | |||
| * in this file. | |||
| */ | |||
| #ifndef NO_NSPR_10_SUPPORT | |||
| #define NO_NSPR_10_SUPPORT | |||
| #endif | |||
| #ifdef OJI | |||
| #include "jri.h" /* Java Runtime Interface */ | |||
| #endif | |||
| #if defined (__OS2__ ) || defined (OS2) | |||
| # ifndef XP_OS2 | |||
| # define XP_OS2 1 | |||
| # endif /* XP_OS2 */ | |||
| #endif /* __OS2__ */ | |||
| #ifdef _WINDOWS | |||
| # include <windef.h> | |||
| # ifndef XP_WIN | |||
| # define XP_WIN 1 | |||
| # endif /* XP_WIN */ | |||
| #endif /* _WINDOWS */ | |||
| #ifdef __MWERKS__ | |||
| # define _declspec __declspec | |||
| # ifdef __INTEL__ | |||
| # undef NULL | |||
| # ifndef XP_WIN | |||
| # define XP_WIN 1 | |||
| # endif /* XP_WIN */ | |||
| # endif /* __INTEL__ */ | |||
| #endif /* __MWERKS__ */ | |||
| #ifdef XP_MACOSX | |||
| #include <Carbon/Carbon.h> | |||
| #ifdef __LP64__ | |||
| #define NP_NO_QUICKDRAW | |||
| #endif | |||
| #endif | |||
| #if defined(XP_UNIX) | |||
| # include <stdio.h> | |||
| # if defined(MOZ_X11) | |||
| # include <X11/Xlib.h> | |||
| # include <X11/Xutil.h> | |||
| # endif | |||
| #endif | |||
| /*----------------------------------------------------------------------*/ | |||
| /* Plugin Version Constants */ | |||
| /*----------------------------------------------------------------------*/ | |||
| #define NP_VERSION_MAJOR 0 | |||
| #define NP_VERSION_MINOR 19 | |||
| /* The OS/2 version of Netscape uses RC_DATA to define the | |||
| mime types, file extensions, etc that are required. | |||
| Use a vertical bar to separate types, end types with \0. | |||
| FileVersion and ProductVersion are 32bit ints, all other | |||
| entries are strings the MUST be terminated wwith a \0. | |||
| AN EXAMPLE: | |||
| RCDATA NP_INFO_ProductVersion { 1,0,0,1,} | |||
| RCDATA NP_INFO_MIMEType { "video/x-video|", | |||
| "video/x-flick\0" } | |||
| RCDATA NP_INFO_FileExtents { "avi|", | |||
| "flc\0" } | |||
| RCDATA NP_INFO_FileOpenName{ "MMOS2 video player(*.avi)|", | |||
| "MMOS2 Flc/Fli player(*.flc)\0" } | |||
| RCDATA NP_INFO_FileVersion { 1,0,0,1 } | |||
| RCDATA NP_INFO_CompanyName { "Netscape Communications\0" } | |||
| RCDATA NP_INFO_FileDescription { "NPAVI32 Extension DLL\0" | |||
| RCDATA NP_INFO_InternalName { "NPAVI32\0" ) | |||
| RCDATA NP_INFO_LegalCopyright { "Copyright Netscape Communications \251 1996\0" | |||
| RCDATA NP_INFO_OriginalFilename { "NVAPI32.DLL" } | |||
| RCDATA NP_INFO_ProductName { "NPAVI32 Dynamic Link Library\0" } | |||
| */ | |||
| /* RC_DATA types for version info - required */ | |||
| #define NP_INFO_ProductVersion 1 | |||
| #define NP_INFO_MIMEType 2 | |||
| #define NP_INFO_FileOpenName 3 | |||
| #define NP_INFO_FileExtents 4 | |||
| /* RC_DATA types for version info - used if found */ | |||
| #define NP_INFO_FileDescription 5 | |||
| #define NP_INFO_ProductName 6 | |||
| /* RC_DATA types for version info - optional */ | |||
| #define NP_INFO_CompanyName 7 | |||
| #define NP_INFO_FileVersion 8 | |||
| #define NP_INFO_InternalName 9 | |||
| #define NP_INFO_LegalCopyright 10 | |||
| #define NP_INFO_OriginalFilename 11 | |||
| #ifndef RC_INVOKED | |||
| /*----------------------------------------------------------------------*/ | |||
| /* Definition of Basic Types */ | |||
| /*----------------------------------------------------------------------*/ | |||
| #ifndef _UINT16 | |||
| typedef unsigned short uint16; | |||
| #endif | |||
| #ifndef _UINT32 | |||
| # if defined(__alpha) || defined(__amd64__) || defined(__x86_64__) | |||
| typedef unsigned int uint32; | |||
| # else /* __alpha */ | |||
| typedef unsigned long uint32; | |||
| # endif /* __alpha */ | |||
| #endif | |||
| /* | |||
| * AIX defines these in sys/inttypes.h included from sys/types.h | |||
| */ | |||
| #ifndef AIX | |||
| #ifndef _INT16 | |||
| typedef short int16; | |||
| #endif | |||
| #ifndef _INT32 | |||
| # if defined(__alpha) || defined(__amd64__) || defined(__x86_64__) | |||
| typedef int int32; | |||
| # else /* __alpha */ | |||
| typedef long int32; | |||
| # endif /* __alpha */ | |||
| #endif | |||
| #endif | |||
| #ifndef FALSE | |||
| #define FALSE (0) | |||
| #endif | |||
| #ifndef TRUE | |||
| #define TRUE (1) | |||
| #endif | |||
| #ifndef NULL | |||
| #define NULL (0L) | |||
| #endif | |||
| #ifdef XP_MACOSX | |||
| typedef enum { | |||
| #ifndef NP_NO_QUICKDRAW | |||
| NPDrawingModelQuickDraw = 0, | |||
| #endif | |||
| NPDrawingModelCoreGraphics = 1 | |||
| } NPDrawingModel; | |||
| #endif | |||
| typedef unsigned char NPBool; | |||
| typedef int16 NPError; | |||
| typedef int16 NPReason; | |||
| typedef char* NPMIMEType; | |||
| /*----------------------------------------------------------------------*/ | |||
| /* Structures and definitions */ | |||
| /*----------------------------------------------------------------------*/ | |||
| /* | |||
| * NPP is a plug-in's opaque instance handle | |||
| */ | |||
| typedef struct _NPP | |||
| { | |||
| void* pdata; /* plug-in private data */ | |||
| void* ndata; /* netscape private data */ | |||
| } NPP_t; | |||
| typedef NPP_t* NPP; | |||
| typedef struct _NPStream | |||
| { | |||
| void* pdata; /* plug-in private data */ | |||
| void* ndata; /* netscape private data */ | |||
| const char* url; | |||
| uint32 end; | |||
| uint32 lastmodified; | |||
| void* notifyData; | |||
| const char* headers; /* Response headers from host. | |||
| * Exists only for >= NPVERS_HAS_RESPONSE_HEADERS. | |||
| * Used for HTTP only; NULL for non-HTTP. | |||
| * Available from NPP_NewStream onwards. | |||
| * Plugin should copy this data before storing it. | |||
| * Includes HTTP status line and all headers, | |||
| * preferably verbatim as received from server, | |||
| * headers formatted as in HTTP ("Header: Value"), | |||
| * and newlines (\n, NOT \r\n) separating lines. | |||
| * Terminated by \n\0 (NOT \n\n\0). */ | |||
| } NPStream; | |||
| typedef struct _NPByteRange | |||
| { | |||
| int32 offset; /* negative offset means from the end */ | |||
| uint32 length; | |||
| struct _NPByteRange* next; | |||
| } NPByteRange; | |||
| typedef struct _NPSavedData | |||
| { | |||
| int32 len; | |||
| void* buf; | |||
| } NPSavedData; | |||
| typedef struct _NPRect | |||
| { | |||
| uint16 top; | |||
| uint16 left; | |||
| uint16 bottom; | |||
| uint16 right; | |||
| } NPRect; | |||
| typedef struct _NPSize | |||
| { | |||
| int32 width; | |||
| int32 height; | |||
| } NPSize; | |||
| #ifdef XP_UNIX | |||
| /* | |||
| * Unix specific structures and definitions | |||
| */ | |||
| /* | |||
| * Callback Structures. | |||
| * | |||
| * These are used to pass additional platform specific information. | |||
| */ | |||
| enum { | |||
| NP_SETWINDOW = 1, | |||
| NP_PRINT | |||
| }; | |||
| typedef struct | |||
| { | |||
| int32 type; | |||
| } NPAnyCallbackStruct; | |||
| typedef struct | |||
| { | |||
| int32 type; | |||
| #ifdef MOZ_X11 | |||
| Display* display; | |||
| Visual* visual; | |||
| Colormap colormap; | |||
| unsigned int depth; | |||
| #endif | |||
| } NPSetWindowCallbackStruct; | |||
| typedef struct | |||
| { | |||
| int32 type; | |||
| FILE* fp; | |||
| } NPPrintCallbackStruct; | |||
| #endif /* XP_UNIX */ | |||
| /* | |||
| * The following masks are applied on certain platforms to NPNV and | |||
| * NPPV selectors that pass around pointers to COM interfaces. Newer | |||
| * compilers on some platforms may generate vtables that are not | |||
| * compatible with older compilers. To prevent older plugins from | |||
| * not understanding a new browser's ABI, these masks change the | |||
| * values of those selectors on those platforms. To remain backwards | |||
| * compatible with differenet versions of the browser, plugins can | |||
| * use these masks to dynamically determine and use the correct C++ | |||
| * ABI that the browser is expecting. This does not apply to Windows | |||
| * as Microsoft's COM ABI will likely not change. | |||
| */ | |||
| #define NP_ABI_GCC3_MASK 0x10000000 | |||
| /* | |||
| * gcc 3.x generated vtables on UNIX and OSX are incompatible with | |||
| * previous compilers. | |||
| */ | |||
| #if (defined (XP_UNIX) && defined(__GNUC__) && (__GNUC__ >= 3)) | |||
| #define _NP_ABI_MIXIN_FOR_GCC3 NP_ABI_GCC3_MASK | |||
| #else | |||
| #define _NP_ABI_MIXIN_FOR_GCC3 0 | |||
| #endif | |||
| #define NP_ABI_MACHO_MASK 0x01000000 | |||
| /* | |||
| * On OSX, the Mach-O executable format is significantly | |||
| * different than CFM. In addition to having a different | |||
| * C++ ABI, it also has has different C calling convention. | |||
| * You must use glue code when calling between CFM and | |||
| * Mach-O C functions. | |||
| */ | |||
| #if (defined(TARGET_RT_MAC_MACHO)) | |||
| #define _NP_ABI_MIXIN_FOR_MACHO NP_ABI_MACHO_MASK | |||
| #else | |||
| #define _NP_ABI_MIXIN_FOR_MACHO 0 | |||
| #endif | |||
| #define NP_ABI_MASK (_NP_ABI_MIXIN_FOR_GCC3 | _NP_ABI_MIXIN_FOR_MACHO) | |||
| /* | |||
| * List of variable names for which NPP_GetValue shall be implemented | |||
| */ | |||
| typedef enum { | |||
| NPPVpluginNameString = 1, | |||
| NPPVpluginDescriptionString, | |||
| NPPVpluginWindowBool, | |||
| NPPVpluginTransparentBool, | |||
| NPPVjavaClass, /* Not implemented in Mozilla 1.0 */ | |||
| NPPVpluginWindowSize, | |||
| NPPVpluginTimerInterval, | |||
| NPPVpluginScriptableInstance = (10 | NP_ABI_MASK), | |||
| NPPVpluginScriptableIID = 11, | |||
| /* Introduced in Mozilla 0.9.9 */ | |||
| NPPVjavascriptPushCallerBool = 12, | |||
| /* Introduced in Mozilla 1.0 */ | |||
| NPPVpluginKeepLibraryInMemory = 13, | |||
| NPPVpluginNeedsXEmbed = 14, | |||
| /* Get the NPObject for scripting the plugin. Introduced in Firefox | |||
| * 1.0 (NPAPI minor version 14). | |||
| */ | |||
| NPPVpluginScriptableNPObject = 15, | |||
| /* Get the plugin value (as \0-terminated UTF-8 string data) for | |||
| * form submission if the plugin is part of a form. Use | |||
| * NPN_MemAlloc() to allocate memory for the string data. Introduced | |||
| * in Mozilla 1.8b2 (NPAPI minor version 15). | |||
| */ | |||
| NPPVformValue = 16 | |||
| #ifdef XP_MACOSX | |||
| /* Used for negotiating drawing models */ | |||
| , NPPVpluginDrawingModel = 1000 | |||
| #endif | |||
| } NPPVariable; | |||
| /* | |||
| * List of variable names for which NPN_GetValue is implemented by Mozilla | |||
| */ | |||
| typedef enum { | |||
| NPNVxDisplay = 1, | |||
| NPNVxtAppContext, | |||
| NPNVnetscapeWindow, | |||
| NPNVjavascriptEnabledBool, | |||
| NPNVasdEnabledBool, | |||
| NPNVisOfflineBool, | |||
| /* 10 and over are available on Mozilla builds starting with 0.9.4 */ | |||
| NPNVserviceManager = (10 | NP_ABI_MASK), | |||
| NPNVDOMElement = (11 | NP_ABI_MASK), /* available in Mozilla 1.2 */ | |||
| NPNVDOMWindow = (12 | NP_ABI_MASK), | |||
| NPNVToolkit = (13 | NP_ABI_MASK), | |||
| NPNVSupportsXEmbedBool = 14, | |||
| /* Get the NPObject wrapper for the browser window. */ | |||
| NPNVWindowNPObject = 15, | |||
| /* Get the NPObject wrapper for the plugins DOM element. */ | |||
| NPNVPluginElementNPObject = 16, | |||
| NPNVSupportsWindowless = 17 | |||
| #ifdef XP_MACOSX | |||
| /* Used for negotiating drawing models */ | |||
| , NPNVpluginDrawingModel = 1000 | |||
| #ifndef NP_NO_QUICKDRAW | |||
| , NPNVsupportsQuickDrawBool = 2000 | |||
| #endif | |||
| , NPNVsupportsCoreGraphicsBool = 2001 | |||
| #endif | |||
| } NPNVariable; | |||
| /* | |||
| * The type of Tookkit the widgets use | |||
| */ | |||
| typedef enum { | |||
| NPNVGtk12 = 1, | |||
| NPNVGtk2 | |||
| } NPNToolkitType; | |||
| /* | |||
| * The type of a NPWindow - it specifies the type of the data structure | |||
| * returned in the window field. | |||
| */ | |||
| typedef enum { | |||
| NPWindowTypeWindow = 1, | |||
| NPWindowTypeDrawable | |||
| } NPWindowType; | |||
| typedef struct _NPWindow | |||
| { | |||
| void* window; /* Platform specific window handle */ | |||
| /* OS/2: x - Position of bottom left corner */ | |||
| /* OS/2: y - relative to visible netscape window */ | |||
| int32 x; /* Position of top left corner relative */ | |||
| int32 y; /* to a netscape page. */ | |||
| uint32 width; /* Maximum window size */ | |||
| uint32 height; | |||
| NPRect clipRect; /* Clipping rectangle in port coordinates */ | |||
| /* Used by MAC only. */ | |||
| #if defined(XP_UNIX) && !defined(XP_MACOSX) | |||
| void * ws_info; /* Platform-dependent additonal data */ | |||
| #endif /* XP_UNIX */ | |||
| NPWindowType type; /* Is this a window or a drawable? */ | |||
| } NPWindow; | |||
| typedef struct _NPFullPrint | |||
| { | |||
| NPBool pluginPrinted;/* Set TRUE if plugin handled fullscreen printing */ | |||
| NPBool printOne; /* TRUE if plugin should print one copy to default printer */ | |||
| void* platformPrint; /* Platform-specific printing info */ | |||
| } NPFullPrint; | |||
| typedef struct _NPEmbedPrint | |||
| { | |||
| NPWindow window; | |||
| void* platformPrint; /* Platform-specific printing info */ | |||
| } NPEmbedPrint; | |||
| typedef struct _NPPrint | |||
| { | |||
| uint16 mode; /* NP_FULL or NP_EMBED */ | |||
| union | |||
| { | |||
| NPFullPrint fullPrint; /* if mode is NP_FULL */ | |||
| NPEmbedPrint embedPrint; /* if mode is NP_EMBED */ | |||
| } print; | |||
| } NPPrint; | |||
| #ifdef XP_MACOSX | |||
| typedef EventRecord NPEvent; | |||
| #elif defined(XP_WIN) | |||
| typedef struct _NPEvent | |||
| { | |||
| uint16 event; | |||
| uint32 wParam; | |||
| uint32 lParam; | |||
| } NPEvent; | |||
| #elif defined(XP_OS2) | |||
| typedef struct _NPEvent | |||
| { | |||
| uint32 event; | |||
| uint32 wParam; | |||
| uint32 lParam; | |||
| } NPEvent; | |||
| #elif defined (XP_UNIX) && defined(MOZ_X11) | |||
| typedef XEvent NPEvent; | |||
| #else | |||
| typedef void* NPEvent; | |||
| #endif /* XP_MACOSX */ | |||
| #ifdef XP_MACOSX | |||
| typedef void* NPRegion; | |||
| #ifndef NP_NO_QUICKDRAW | |||
| typedef RgnHandle NPQDRegion; | |||
| #endif | |||
| typedef CGPathRef NPCGRegion; | |||
| #elif defined(XP_WIN) | |||
| typedef HRGN NPRegion; | |||
| #elif defined(XP_UNIX) && defined(MOZ_X11) | |||
| typedef Region NPRegion; | |||
| #else | |||
| typedef void *NPRegion; | |||
| #endif /* XP_MACOSX */ | |||
| #ifdef XP_MACOSX | |||
| /* | |||
| * Mac-specific structures and definitions. | |||
| */ | |||
| typedef struct NP_Port | |||
| { | |||
| CGrafPtr port; /* Grafport */ | |||
| int32 portx; /* position inside the topmost window */ | |||
| int32 porty; | |||
| } NP_Port; | |||
| typedef struct NP_CGContext | |||
| { | |||
| CGContextRef context; | |||
| WindowRef window; | |||
| } NP_CGContext; | |||
| /* | |||
| * Non-standard event types that can be passed to HandleEvent | |||
| */ | |||
| enum NPEventType { | |||
| NPEventType_GetFocusEvent = (osEvt + 16), | |||
| NPEventType_LoseFocusEvent, | |||
| NPEventType_AdjustCursorEvent, | |||
| NPEventType_MenuCommandEvent, | |||
| NPEventType_ClippingChangedEvent, | |||
| NPEventType_ScrollingBeginsEvent = 1000, | |||
| NPEventType_ScrollingEndsEvent | |||
| }; | |||
| #ifdef OBSOLETE | |||
| #define getFocusEvent (osEvt + 16) | |||
| #define loseFocusEvent (osEvt + 17) | |||
| #define adjustCursorEvent (osEvt + 18) | |||
| #endif | |||
| #endif /* XP_MACOSX */ | |||
| /* | |||
| * Values for mode passed to NPP_New: | |||
| */ | |||
| #define NP_EMBED 1 | |||
| #define NP_FULL 2 | |||
| /* | |||
| * Values for stream type passed to NPP_NewStream: | |||
| */ | |||
| #define NP_NORMAL 1 | |||
| #define NP_SEEK 2 | |||
| #define NP_ASFILE 3 | |||
| #define NP_ASFILEONLY 4 | |||
| #define NP_MAXREADY (((unsigned)(~0)<<1)>>1) | |||
| /*----------------------------------------------------------------------*/ | |||
| /* Error and Reason Code definitions */ | |||
| /*----------------------------------------------------------------------*/ | |||
| /* | |||
| * Values of type NPError: | |||
| */ | |||
| #define NPERR_BASE 0 | |||
| #define NPERR_NO_ERROR (NPERR_BASE + 0) | |||
| #define NPERR_GENERIC_ERROR (NPERR_BASE + 1) | |||
| #define NPERR_INVALID_INSTANCE_ERROR (NPERR_BASE + 2) | |||
| #define NPERR_INVALID_FUNCTABLE_ERROR (NPERR_BASE + 3) | |||
| #define NPERR_MODULE_LOAD_FAILED_ERROR (NPERR_BASE + 4) | |||
| #define NPERR_OUT_OF_MEMORY_ERROR (NPERR_BASE + 5) | |||
| #define NPERR_INVALID_PLUGIN_ERROR (NPERR_BASE + 6) | |||
| #define NPERR_INVALID_PLUGIN_DIR_ERROR (NPERR_BASE + 7) | |||
| #define NPERR_INCOMPATIBLE_VERSION_ERROR (NPERR_BASE + 8) | |||
| #define NPERR_INVALID_PARAM (NPERR_BASE + 9) | |||
| #define NPERR_INVALID_URL (NPERR_BASE + 10) | |||
| #define NPERR_FILE_NOT_FOUND (NPERR_BASE + 11) | |||
| #define NPERR_NO_DATA (NPERR_BASE + 12) | |||
| #define NPERR_STREAM_NOT_SEEKABLE (NPERR_BASE + 13) | |||
| /* | |||
| * Values of type NPReason: | |||
| */ | |||
| #define NPRES_BASE 0 | |||
| #define NPRES_DONE (NPRES_BASE + 0) | |||
| #define NPRES_NETWORK_ERR (NPRES_BASE + 1) | |||
| #define NPRES_USER_BREAK (NPRES_BASE + 2) | |||
| /* | |||
| * Don't use these obsolete error codes any more. | |||
| */ | |||
| #define NP_NOERR NP_NOERR_is_obsolete_use_NPERR_NO_ERROR | |||
| #define NP_EINVAL NP_EINVAL_is_obsolete_use_NPERR_GENERIC_ERROR | |||
| #define NP_EABORT NP_EABORT_is_obsolete_use_NPRES_USER_BREAK | |||
| /* | |||
| * Version feature information | |||
| */ | |||
| #define NPVERS_HAS_STREAMOUTPUT 8 | |||
| #define NPVERS_HAS_NOTIFICATION 9 | |||
| #define NPVERS_HAS_LIVECONNECT 9 | |||
| #define NPVERS_WIN16_HAS_LIVECONNECT 9 | |||
| #define NPVERS_68K_HAS_LIVECONNECT 11 | |||
| #define NPVERS_HAS_WINDOWLESS 11 | |||
| #define NPVERS_HAS_XPCONNECT_SCRIPTING 13 | |||
| #define NPVERS_HAS_NPRUNTIME_SCRIPTING 14 | |||
| #define NPVERS_HAS_FORM_VALUES 15 | |||
| #define NPVERS_HAS_POPUPS_ENABLED_STATE 16 | |||
| #define NPVERS_HAS_RESPONSE_HEADERS 17 | |||
| #define NPVERS_HAS_NPOBJECT_ENUM 18 | |||
| #define NPVERS_HAS_PLUGIN_THREAD_ASYNC_CALL 19 | |||
| /*----------------------------------------------------------------------*/ | |||
| /* Function Prototypes */ | |||
| /*----------------------------------------------------------------------*/ | |||
| #if defined(_WINDOWS) && !defined(WIN32) | |||
| #define NP_LOADDS _loadds | |||
| #else | |||
| #if defined(__OS2__) | |||
| #define NP_LOADDS _System | |||
| #else | |||
| #define NP_LOADDS | |||
| #endif | |||
| #endif | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #endif | |||
| /* | |||
| * NPP_* functions are provided by the plugin and called by the navigator. | |||
| */ | |||
| #ifdef XP_UNIX | |||
| char* NPP_GetMIMEDescription(void); | |||
| #endif /* XP_UNIX */ | |||
| NPError NP_LOADDS NPP_Initialize(void); | |||
| void NP_LOADDS NPP_Shutdown(void); | |||
| NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP instance, | |||
| uint16 mode, int16 argc, char* argn[], | |||
| char* argv[], NPSavedData* saved); | |||
| NPError NP_LOADDS NPP_Destroy(NPP instance, NPSavedData** save); | |||
| NPError NP_LOADDS NPP_SetWindow(NPP instance, NPWindow* window); | |||
| NPError NP_LOADDS NPP_NewStream(NPP instance, NPMIMEType type, | |||
| NPStream* stream, NPBool seekable, | |||
| uint16* stype); | |||
| NPError NP_LOADDS NPP_DestroyStream(NPP instance, NPStream* stream, | |||
| NPReason reason); | |||
| int32 NP_LOADDS NPP_WriteReady(NPP instance, NPStream* stream); | |||
| int32 NP_LOADDS NPP_Write(NPP instance, NPStream* stream, int32 offset, | |||
| int32 len, void* buffer); | |||
| void NP_LOADDS NPP_StreamAsFile(NPP instance, NPStream* stream, | |||
| const char* fname); | |||
| void NP_LOADDS NPP_Print(NPP instance, NPPrint* platformPrint); | |||
| int16 NP_LOADDS NPP_HandleEvent(NPP instance, void* event); | |||
| void NP_LOADDS NPP_URLNotify(NPP instance, const char* url, | |||
| NPReason reason, void* notifyData); | |||
| #ifdef OJI | |||
| jref NP_LOADDS NPP_GetJavaClass(void); | |||
| #endif | |||
| NPError NP_LOADDS NPP_GetValue(NPP instance, NPPVariable variable, void *value); | |||
| NPError NP_LOADDS NPP_SetValue(NPP instance, NPNVariable variable, void *value); | |||
| /* | |||
| * NPN_* functions are provided by the navigator and called by the plugin. | |||
| */ | |||
| void NP_LOADDS NPN_Version(int* plugin_major, int* plugin_minor, | |||
| int* netscape_major, int* netscape_minor); | |||
| NPError NP_LOADDS NPN_GetURLNotify(NPP instance, const char* url, | |||
| const char* target, void* notifyData); | |||
| NPError NP_LOADDS NPN_GetURL(NPP instance, const char* url, | |||
| const char* target); | |||
| NPError NP_LOADDS NPN_PostURLNotify(NPP instance, const char* url, | |||
| const char* target, uint32 len, | |||
| const char* buf, NPBool file, | |||
| void* notifyData); | |||
| NPError NP_LOADDS NPN_PostURL(NPP instance, const char* url, | |||
| const char* target, uint32 len, | |||
| const char* buf, NPBool file); | |||
| NPError NP_LOADDS NPN_RequestRead(NPStream* stream, NPByteRange* rangeList); | |||
| NPError NP_LOADDS NPN_NewStream(NPP instance, NPMIMEType type, | |||
| const char* target, NPStream** stream); | |||
| int32 NP_LOADDS NPN_Write(NPP instance, NPStream* stream, int32 len, void* buffer); | |||
| NPError NP_LOADDS NPN_DestroyStream(NPP instance, NPStream* stream, NPReason reason); | |||
| void NP_LOADDS NPN_Status(NPP instance, const char* message); | |||
| const char* NP_LOADDS NPN_UserAgent(NPP instance); | |||
| void* NP_LOADDS NPN_MemAlloc(uint32 size); | |||
| void NP_LOADDS NPN_MemFree(void* ptr); | |||
| uint32 NP_LOADDS NPN_MemFlush(uint32 size); | |||
| void NP_LOADDS NPN_ReloadPlugins(NPBool reloadPages); | |||
| #ifdef OJI | |||
| JRIEnv* NP_LOADDS NPN_GetJavaEnv(void); | |||
| jref NP_LOADDS NPN_GetJavaPeer(NPP instance); | |||
| #endif | |||
| NPError NP_LOADDS NPN_GetValue(NPP instance, NPNVariable variable, void *value); | |||
| NPError NP_LOADDS NPN_SetValue(NPP instance, NPPVariable variable, void *value); | |||
| void NP_LOADDS NPN_InvalidateRect(NPP instance, NPRect *invalidRect); | |||
| void NP_LOADDS NPN_InvalidateRegion(NPP instance, NPRegion invalidRegion); | |||
| void NP_LOADDS NPN_ForceRedraw(NPP instance); | |||
| void NP_LOADDS NPN_PushPopupsEnabledState(NPP instance, NPBool enabled); | |||
| void NP_LOADDS NPN_PopPopupsEnabledState(NPP instance); | |||
| void NP_LOADDS NPN_PluginThreadAsyncCall(NPP instance, | |||
| void (*func) (void *), | |||
| void *userData); | |||
| #ifdef __cplusplus | |||
| } /* end extern "C" */ | |||
| #endif | |||
| #endif /* RC_INVOKED */ | |||
| #ifdef __OS2__ | |||
| #pragma pack() | |||
| #endif | |||
| #endif /* _NPAPI_H_ */ | |||
| @@ -0,0 +1,423 @@ | |||
| /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | |||
| /* | |||
| * Copyright © 2004, Apple Computer, Inc. and The Mozilla Foundation. | |||
| * All rights reserved. | |||
| * | |||
| * Redistribution and use in source and binary forms, with or without | |||
| * modification, are permitted provided that the following conditions are | |||
| * met: | |||
| * | |||
| * 1. Redistributions of source code must retain the above copyright | |||
| * notice, this list of conditions and the following disclaimer. | |||
| * 2. Redistributions in binary form must reproduce the above copyright | |||
| * notice, this list of conditions and the following disclaimer in the | |||
| * documentation and/or other materials provided with the distribution. | |||
| * 3. Neither the names of Apple Computer, Inc. ("Apple") or The Mozilla | |||
| * Foundation ("Mozilla") nor the names of their contributors may be used | |||
| * to endorse or promote products derived from this software without | |||
| * specific prior written permission. | |||
| * | |||
| * THIS SOFTWARE IS PROVIDED BY APPLE, MOZILLA AND THEIR CONTRIBUTORS "AS | |||
| * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | |||
| * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | |||
| * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, MOZILLA OR | |||
| * THEIR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | |||
| * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |||
| * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |||
| * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |||
| * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |||
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
| * | |||
| * Revision 1 (March 4, 2004): | |||
| * Initial proposal. | |||
| * | |||
| * Revision 2 (March 10, 2004): | |||
| * All calls into script were made asynchronous. Results are | |||
| * provided via the NPScriptResultFunctionPtr callback. | |||
| * | |||
| * Revision 3 (March 10, 2004): | |||
| * Corrected comments to not refer to class retain/release FunctionPtrs. | |||
| * | |||
| * Revision 4 (March 11, 2004): | |||
| * Added additional convenience NPN_SetExceptionWithUTF8(). | |||
| * Changed NPHasPropertyFunctionPtr and NPHasMethodFunctionPtr to take NPClass | |||
| * pointers instead of NPObject pointers. | |||
| * Added NPIsValidIdentifier(). | |||
| * | |||
| * Revision 5 (March 17, 2004): | |||
| * Added context parameter to result callbacks from ScriptObject functions. | |||
| * | |||
| * Revision 6 (March 29, 2004): | |||
| * Renamed functions implemented by user agent to NPN_*. Removed _ from | |||
| * type names. | |||
| * Renamed "JavaScript" types to "Script". | |||
| * | |||
| * Revision 7 (April 21, 2004): | |||
| * NPIdentifier becomes a void*, was int32_t | |||
| * Remove NP_IsValidIdentifier, renamed NP_IdentifierFromUTF8 to NP_GetIdentifier | |||
| * Added NPVariant and modified functions to use this new type. | |||
| * | |||
| * Revision 8 (July 9, 2004): | |||
| * Updated to joint Apple-Mozilla license. | |||
| * | |||
| */ | |||
| #ifndef _NP_RUNTIME_H_ | |||
| #define _NP_RUNTIME_H_ | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #endif | |||
| #include "nptypes.h" | |||
| /* | |||
| This API is used to facilitate binding code written in C to script | |||
| objects. The API in this header does not assume the presence of a | |||
| user agent. That is, it can be used to bind C code to scripting | |||
| environments outside of the context of a user agent. | |||
| However, the normal use of the this API is in the context of a | |||
| scripting environment running in a browser or other user agent. | |||
| In particular it is used to support the extended Netscape | |||
| script-ability API for plugins (NP-SAP). NP-SAP is an extension | |||
| of the Netscape plugin API. As such we have adopted the use of | |||
| the "NP" prefix for this API. | |||
| The following NP{N|P}Variables were added to the Netscape plugin | |||
| API (in npapi.h): | |||
| NPNVWindowNPObject | |||
| NPNVPluginElementNPObject | |||
| NPPVpluginScriptableNPObject | |||
| These variables are exposed through NPN_GetValue() and | |||
| NPP_GetValue() (respectively) and are used to establish the | |||
| initial binding between the user agent and native code. The DOM | |||
| objects in the user agent can be examined and manipulated using | |||
| the NPN_ functions that operate on NPObjects described in this | |||
| header. | |||
| To the extent possible the assumptions about the scripting | |||
| language used by the scripting environment have been minimized. | |||
| */ | |||
| #define NP_BEGIN_MACRO do { | |||
| #define NP_END_MACRO } while (0) | |||
| /* | |||
| Objects (non-primitive data) passed between 'C' and script is | |||
| always wrapped in an NPObject. The 'interface' of an NPObject is | |||
| described by an NPClass. | |||
| */ | |||
| typedef struct NPObject NPObject; | |||
| typedef struct NPClass NPClass; | |||
| typedef char NPUTF8; | |||
| typedef struct _NPString { | |||
| const NPUTF8 *utf8characters; | |||
| uint32_t utf8length; | |||
| } NPString; | |||
| typedef enum { | |||
| NPVariantType_Void, | |||
| NPVariantType_Null, | |||
| NPVariantType_Bool, | |||
| NPVariantType_Int32, | |||
| NPVariantType_Double, | |||
| NPVariantType_String, | |||
| NPVariantType_Object | |||
| } NPVariantType; | |||
| typedef struct _NPVariant { | |||
| NPVariantType type; | |||
| union { | |||
| bool boolValue; | |||
| int32_t intValue; | |||
| double doubleValue; | |||
| NPString stringValue; | |||
| NPObject *objectValue; | |||
| } value; | |||
| } NPVariant; | |||
| /* | |||
| NPN_ReleaseVariantValue is called on all 'out' parameters | |||
| references. Specifically it is to be called on variants that own | |||
| their value, as is the case with all non-const NPVariant* | |||
| arguments after a successful call to any methods (except this one) | |||
| in this API. | |||
| After calling NPN_ReleaseVariantValue, the type of the variant | |||
| will be NPVariantType_Void. | |||
| */ | |||
| void NPN_ReleaseVariantValue(NPVariant *variant); | |||
| #define NPVARIANT_IS_VOID(_v) ((_v).type == NPVariantType_Void) | |||
| #define NPVARIANT_IS_NULL(_v) ((_v).type == NPVariantType_Null) | |||
| #define NPVARIANT_IS_BOOLEAN(_v) ((_v).type == NPVariantType_Bool) | |||
| #define NPVARIANT_IS_INT32(_v) ((_v).type == NPVariantType_Int32) | |||
| #define NPVARIANT_IS_DOUBLE(_v) ((_v).type == NPVariantType_Double) | |||
| #define NPVARIANT_IS_STRING(_v) ((_v).type == NPVariantType_String) | |||
| #define NPVARIANT_IS_OBJECT(_v) ((_v).type == NPVariantType_Object) | |||
| #define NPVARIANT_TO_BOOLEAN(_v) ((_v).value.boolValue) | |||
| #define NPVARIANT_TO_INT32(_v) ((_v).value.intValue) | |||
| #define NPVARIANT_TO_DOUBLE(_v) ((_v).value.doubleValue) | |||
| #define NPVARIANT_TO_STRING(_v) ((_v).value.stringValue) | |||
| #define NPVARIANT_TO_OBJECT(_v) ((_v).value.objectValue) | |||
| #define VOID_TO_NPVARIANT(_v) \ | |||
| NP_BEGIN_MACRO \ | |||
| (_v).type = NPVariantType_Void; \ | |||
| (_v).value.objectValue = NULL; \ | |||
| NP_END_MACRO | |||
| #define NULL_TO_NPVARIANT(_v) \ | |||
| NP_BEGIN_MACRO \ | |||
| (_v).type = NPVariantType_Null; \ | |||
| (_v).value.objectValue = NULL; \ | |||
| NP_END_MACRO | |||
| #define BOOLEAN_TO_NPVARIANT(_val, _v) \ | |||
| NP_BEGIN_MACRO \ | |||
| (_v).type = NPVariantType_Bool; \ | |||
| (_v).value.boolValue = !!(_val); \ | |||
| NP_END_MACRO | |||
| #define INT32_TO_NPVARIANT(_val, _v) \ | |||
| NP_BEGIN_MACRO \ | |||
| (_v).type = NPVariantType_Int32; \ | |||
| (_v).value.intValue = _val; \ | |||
| NP_END_MACRO | |||
| #define DOUBLE_TO_NPVARIANT(_val, _v) \ | |||
| NP_BEGIN_MACRO \ | |||
| (_v).type = NPVariantType_Double; \ | |||
| (_v).value.doubleValue = _val; \ | |||
| NP_END_MACRO | |||
| #define STRINGZ_TO_NPVARIANT(_val, _v) \ | |||
| NP_BEGIN_MACRO \ | |||
| (_v).type = NPVariantType_String; \ | |||
| NPString str = { _val, strlen(_val) }; \ | |||
| (_v).value.stringValue = str; \ | |||
| NP_END_MACRO | |||
| #define STRINGN_TO_NPVARIANT(_val, _len, _v) \ | |||
| NP_BEGIN_MACRO \ | |||
| (_v).type = NPVariantType_String; \ | |||
| NPString str = { _val, _len }; \ | |||
| (_v).value.stringValue = str; \ | |||
| NP_END_MACRO | |||
| #define OBJECT_TO_NPVARIANT(_val, _v) \ | |||
| NP_BEGIN_MACRO \ | |||
| (_v).type = NPVariantType_Object; \ | |||
| (_v).value.objectValue = _val; \ | |||
| NP_END_MACRO | |||
| /* | |||
| Type mappings (JavaScript types have been used for illustration | |||
| purposes): | |||
| JavaScript to C (NPVariant with type:) | |||
| undefined NPVariantType_Void | |||
| null NPVariantType_Null | |||
| Boolean NPVariantType_Bool | |||
| Number NPVariantType_Double or NPVariantType_Int32 | |||
| String NPVariantType_String | |||
| Object NPVariantType_Object | |||
| C (NPVariant with type:) to JavaScript | |||
| NPVariantType_Void undefined | |||
| NPVariantType_Null null | |||
| NPVariantType_Bool Boolean | |||
| NPVariantType_Int32 Number | |||
| NPVariantType_Double Number | |||
| NPVariantType_String String | |||
| NPVariantType_Object Object | |||
| */ | |||
| typedef void *NPIdentifier; | |||
| /* | |||
| NPObjects have methods and properties. Methods and properties are | |||
| identified with NPIdentifiers. These identifiers may be reflected | |||
| in script. NPIdentifiers can be either strings or integers, IOW, | |||
| methods and properties can be identified by either strings or | |||
| integers (i.e. foo["bar"] vs foo[1]). NPIdentifiers can be | |||
| compared using ==. In case of any errors, the requested | |||
| NPIdentifier(s) will be NULL. | |||
| */ | |||
| NPIdentifier NPN_GetStringIdentifier(const NPUTF8 *name); | |||
| void NPN_GetStringIdentifiers(const NPUTF8 **names, int32_t nameCount, | |||
| NPIdentifier *identifiers); | |||
| NPIdentifier NPN_GetIntIdentifier(int32_t intid); | |||
| bool NPN_IdentifierIsString(NPIdentifier identifier); | |||
| /* | |||
| The NPUTF8 returned from NPN_UTF8FromIdentifier SHOULD be freed. | |||
| */ | |||
| NPUTF8 *NPN_UTF8FromIdentifier(NPIdentifier identifier); | |||
| /* | |||
| Get the integer represented by identifier. If identifier is not an | |||
| integer identifier, the behaviour is undefined. | |||
| */ | |||
| int32_t NPN_IntFromIdentifier(NPIdentifier identifier); | |||
| /* | |||
| NPObject behavior is implemented using the following set of | |||
| callback functions. | |||
| The NPVariant *result argument of these functions (where | |||
| applicable) should be released using NPN_ReleaseVariantValue(). | |||
| */ | |||
| typedef NPObject *(*NPAllocateFunctionPtr)(NPP npp, NPClass *aClass); | |||
| typedef void (*NPDeallocateFunctionPtr)(NPObject *npobj); | |||
| typedef void (*NPInvalidateFunctionPtr)(NPObject *npobj); | |||
| typedef bool (*NPHasMethodFunctionPtr)(NPObject *npobj, NPIdentifier name); | |||
| typedef bool (*NPInvokeFunctionPtr)(NPObject *npobj, NPIdentifier name, | |||
| const NPVariant *args, uint32_t argCount, | |||
| NPVariant *result); | |||
| typedef bool (*NPInvokeDefaultFunctionPtr)(NPObject *npobj, | |||
| const NPVariant *args, | |||
| uint32_t argCount, | |||
| NPVariant *result); | |||
| typedef bool (*NPHasPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name); | |||
| typedef bool (*NPGetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name, | |||
| NPVariant *result); | |||
| typedef bool (*NPSetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name, | |||
| const NPVariant *value); | |||
| typedef bool (*NPRemovePropertyFunctionPtr)(NPObject *npobj, | |||
| NPIdentifier name); | |||
| typedef bool (*NPEnumerationFunctionPtr)(NPObject *npobj, NPIdentifier **value, | |||
| uint32_t *count); | |||
| typedef bool (*NPConstructFunctionPtr)(NPObject *npobj, | |||
| const NPVariant *args, | |||
| uint32_t argCount, | |||
| NPVariant *result); | |||
| /* | |||
| NPObjects returned by create, retain, invoke, and getProperty pass | |||
| a reference count to the caller. That is, the callee adds a | |||
| reference count which passes to the caller. It is the caller's | |||
| responsibility to release the returned object. | |||
| NPInvokeFunctionPtr function may return 0 to indicate a void | |||
| result. | |||
| NPInvalidateFunctionPtr is called by the scripting environment | |||
| when the native code is shutdown. Any attempt to message a | |||
| NPObject instance after the invalidate callback has been | |||
| called will result in undefined behavior, even if the native code | |||
| is still retaining those NPObject instances. (The runtime | |||
| will typically return immediately, with 0 or NULL, from an attempt | |||
| to dispatch to a NPObject, but this behavior should not be | |||
| depended upon.) | |||
| The NPEnumerationFunctionPtr function may pass an array of | |||
| NPIdentifiers back to the caller. The callee allocs the memory of | |||
| the array using NPN_MemAlloc(), and it's the caller's responsibility | |||
| to release it using NPN_MemFree(). | |||
| */ | |||
| struct NPClass | |||
| { | |||
| uint32_t structVersion; | |||
| NPAllocateFunctionPtr allocate; | |||
| NPDeallocateFunctionPtr deallocate; | |||
| NPInvalidateFunctionPtr invalidate; | |||
| NPHasMethodFunctionPtr hasMethod; | |||
| NPInvokeFunctionPtr invoke; | |||
| NPInvokeDefaultFunctionPtr invokeDefault; | |||
| NPHasPropertyFunctionPtr hasProperty; | |||
| NPGetPropertyFunctionPtr getProperty; | |||
| NPSetPropertyFunctionPtr setProperty; | |||
| NPRemovePropertyFunctionPtr removeProperty; | |||
| NPEnumerationFunctionPtr enumerate; | |||
| NPConstructFunctionPtr construct; | |||
| }; | |||
| #define NP_CLASS_STRUCT_VERSION 3 | |||
| #define NP_CLASS_STRUCT_VERSION_ENUM 2 | |||
| #define NP_CLASS_STRUCT_VERSION_CTOR 3 | |||
| #define NP_CLASS_STRUCT_VERSION_HAS_ENUM(npclass) \ | |||
| ((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_ENUM) | |||
| #define NP_CLASS_STRUCT_VERSION_HAS_CTOR(npclass) \ | |||
| ((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_CTOR) | |||
| struct NPObject { | |||
| NPClass *_class; | |||
| uint32_t referenceCount; | |||
| /* | |||
| * Additional space may be allocated here by types of NPObjects | |||
| */ | |||
| }; | |||
| /* | |||
| If the class has an allocate function, NPN_CreateObject invokes | |||
| that function, otherwise a NPObject is allocated and | |||
| returned. This method will initialize the referenceCount member of | |||
| the NPObject to 1. | |||
| */ | |||
| NPObject *NPN_CreateObject(NPP npp, NPClass *aClass); | |||
| /* | |||
| Increment the NPObject's reference count. | |||
| */ | |||
| NPObject *NPN_RetainObject(NPObject *npobj); | |||
| /* | |||
| Decremented the NPObject's reference count. If the reference | |||
| count goes to zero, the class's destroy function is invoke if | |||
| specified, otherwise the object is freed directly. | |||
| */ | |||
| void NPN_ReleaseObject(NPObject *npobj); | |||
| /* | |||
| Functions to access script objects represented by NPObject. | |||
| Calls to script objects are synchronous. If a function returns a | |||
| value, it will be supplied via the result NPVariant | |||
| argument. Successful calls will return true, false will be | |||
| returned in case of an error. | |||
| Calls made from plugin code to script must be made from the thread | |||
| on which the plugin was initialized. | |||
| */ | |||
| bool NPN_Invoke(NPP npp, NPObject *npobj, NPIdentifier methodName, | |||
| const NPVariant *args, uint32_t argCount, NPVariant *result); | |||
| bool NPN_InvokeDefault(NPP npp, NPObject *npobj, const NPVariant *args, | |||
| uint32_t argCount, NPVariant *result); | |||
| bool NPN_Evaluate(NPP npp, NPObject *npobj, NPString *script, | |||
| NPVariant *result); | |||
| bool NPN_GetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName, | |||
| NPVariant *result); | |||
| bool NPN_SetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName, | |||
| const NPVariant *value); | |||
| bool NPN_RemoveProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName); | |||
| bool NPN_HasProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName); | |||
| bool NPN_HasMethod(NPP npp, NPObject *npobj, NPIdentifier methodName); | |||
| bool NPN_Enumerate(NPP npp, NPObject *npobj, NPIdentifier **identifier, | |||
| uint32_t *count); | |||
| bool NPN_Construct(NPP npp, NPObject *npobj, const NPVariant *args, | |||
| uint32_t argCount, NPVariant *result); | |||
| /* | |||
| NPN_SetException may be called to trigger a script exception upon | |||
| return from entry points into NPObjects. Typical usage: | |||
| NPN_SetException (npobj, message); | |||
| */ | |||
| void NPN_SetException(NPObject *npobj, const NPUTF8 *message); | |||
| #ifdef __cplusplus | |||
| } | |||
| #endif | |||
| #endif | |||
| @@ -0,0 +1,105 @@ | |||
| /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | |||
| /* ***** BEGIN LICENSE BLOCK ***** | |||
| * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |||
| * | |||
| * The contents of this file are subject to the Mozilla Public License Version | |||
| * 1.1 (the "License"); you may not use this file except in compliance with | |||
| * the License. You may obtain a copy of the License at | |||
| * http://www.mozilla.org/MPL/ | |||
| * | |||
| * Software distributed under the License is distributed on an "AS IS" basis, | |||
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |||
| * for the specific language governing rights and limitations under the | |||
| * License. | |||
| * | |||
| * The Original Code is mozilla.org code. | |||
| * | |||
| * The Initial Developer of the Original Code is | |||
| * mozilla.org. | |||
| * Portions created by the Initial Developer are Copyright (C) 2004 | |||
| * the Initial Developer. All Rights Reserved. | |||
| * | |||
| * Contributor(s): | |||
| * Johnny Stenback <jst@mozilla.org> (Original author) | |||
| * | |||
| * Alternatively, the contents of this file may be used under the terms of | |||
| * either the GNU General Public License Version 2 or later (the "GPL"), or | |||
| * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | |||
| * in which case the provisions of the GPL or the LGPL are applicable instead | |||
| * of those above. If you wish to allow use of your version of this file only | |||
| * under the terms of either the GPL or the LGPL, and not to allow others to | |||
| * use your version of this file under the terms of the MPL, indicate your | |||
| * decision by deleting the provisions above and replace them with the notice | |||
| * and other provisions required by the GPL or the LGPL. If you do not delete | |||
| * the provisions above, a recipient may use your version of this file under | |||
| * the terms of any one of the MPL, the GPL or the LGPL. | |||
| * | |||
| * ***** END LICENSE BLOCK ***** */ | |||
| /* | |||
| * Header file for ensuring that C99 types ([u]int32_t and bool) are | |||
| * available. | |||
| */ | |||
| #if defined(WIN32) || defined(OS2) | |||
| /* | |||
| * Win32 and OS/2 don't know C99, so define [u]int_32 here. The bool | |||
| * is predefined tho, both in C and C++. | |||
| */ | |||
| typedef int int32_t; | |||
| typedef unsigned int uint32_t; | |||
| #elif defined(_AIX) || defined(__sun) || defined(__osf__) || defined(IRIX) || defined(HPUX) | |||
| /* | |||
| * AIX and SunOS ship a inttypes.h header that defines [u]int32_t, | |||
| * but not bool for C. | |||
| */ | |||
| #include <inttypes.h> | |||
| #ifndef __cplusplus | |||
| typedef int bool; | |||
| #endif | |||
| #elif defined(bsdi) || defined(FREEBSD) || defined(OPENBSD) | |||
| /* | |||
| * BSD/OS, FreeBSD, and OpenBSD ship sys/types.h that define int32_t and | |||
| * u_int32_t. | |||
| */ | |||
| #include <sys/types.h> | |||
| /* | |||
| * BSD/OS ships no header that defines uint32_t, nor bool (for C) | |||
| */ | |||
| #if defined(bsdi) | |||
| typedef u_int32_t uint32_t; | |||
| #if !defined(__cplusplus) | |||
| typedef int bool; | |||
| #endif | |||
| #else | |||
| /* | |||
| * FreeBSD and OpenBSD define uint32_t and bool. | |||
| */ | |||
| #include <inttypes.h> | |||
| #include <stdbool.h> | |||
| #endif | |||
| #elif defined(BEOS) | |||
| #include <inttypes.h> | |||
| #else | |||
| /* | |||
| * For those that ship a standard C99 stdint.h header file, include | |||
| * it. Can't do the same for stdbool.h tho, since some systems ship | |||
| * with a stdbool.h file that doesn't compile! | |||
| */ | |||
| #include <stdint.h> | |||
| #ifndef __cplusplus | |||
| #if !defined(__GNUC__) || (__GNUC__ > 2 || __GNUC_MINOR__ > 95) | |||
| #include <stdbool.h> | |||
| #else | |||
| /* | |||
| * GCC 2.91 can't deal with a typedef for bool, but a #define | |||
| * works. | |||
| */ | |||
| #define bool int | |||
| #endif | |||
| #endif | |||
| #endif | |||
| @@ -0,0 +1,715 @@ | |||
| /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | |||
| /* ***** BEGIN LICENSE BLOCK ***** | |||
| * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |||
| * | |||
| * The contents of this file are subject to the Mozilla Public License Version | |||
| * 1.1 (the "License"); you may not use this file except in compliance with | |||
| * the License. You may obtain a copy of the License at | |||
| * http://www.mozilla.org/MPL/ | |||
| * | |||
| * Software distributed under the License is distributed on an "AS IS" basis, | |||
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |||
| * for the specific language governing rights and limitations under the | |||
| * License. | |||
| * | |||
| * The Original Code is mozilla.org code. | |||
| * | |||
| * The Initial Developer of the Original Code is | |||
| * Netscape Communications Corporation. | |||
| * Portions created by the Initial Developer are Copyright (C) 1998 | |||
| * the Initial Developer. All Rights Reserved. | |||
| * | |||
| * Contributor(s): | |||
| * | |||
| * Alternatively, the contents of this file may be used under the terms of | |||
| * either the GNU General Public License Version 2 or later (the "GPL"), or | |||
| * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | |||
| * in which case the provisions of the GPL or the LGPL are applicable instead | |||
| * of those above. If you wish to allow use of your version of this file only | |||
| * under the terms of either the GPL or the LGPL, and not to allow others to | |||
| * use your version of this file under the terms of the MPL, indicate your | |||
| * decision by deleting the provisions above and replace them with the notice | |||
| * and other provisions required by the GPL or the LGPL. If you do not delete | |||
| * the provisions above, a recipient may use your version of this file under | |||
| * the terms of any one of the MPL, the GPL or the LGPL. | |||
| * | |||
| * ***** END LICENSE BLOCK ***** */ | |||
| /* | |||
| * npupp.h $Revision: 3.26 $ | |||
| * function call mecahnics needed by platform specific glue code. | |||
| */ | |||
| #ifndef _NPUPP_H_ | |||
| #define _NPUPP_H_ | |||
| #if defined(__OS2__) | |||
| #pragma pack(1) | |||
| #endif | |||
| #ifndef GENERATINGCFM | |||
| #define GENERATINGCFM 0 | |||
| #endif | |||
| #ifndef _NPAPI_H_ | |||
| #include "npapi.h" | |||
| #endif | |||
| #include "npruntime.h" | |||
| #include "jri.h" | |||
| /****************************************************************************************** | |||
| plug-in function table macros | |||
| for each function in and out of the plugin API we define | |||
| typedef NPP_FooUPP | |||
| #define NewNPP_FooProc | |||
| #define CallNPP_FooProc | |||
| *******************************************************************************************/ | |||
| /* NPP_Initialize */ | |||
| typedef void (* NP_LOADDS NPP_InitializeUPP)(void); | |||
| #define NewNPP_InitializeProc(FUNC) \ | |||
| ((NPP_InitializeUPP) (FUNC)) | |||
| #define CallNPP_InitializeProc(FUNC) \ | |||
| (*(FUNC))() | |||
| /* NPP_Shutdown */ | |||
| typedef void (* NP_LOADDS NPP_ShutdownUPP)(void); | |||
| #define NewNPP_ShutdownProc(FUNC) \ | |||
| ((NPP_ShutdownUPP) (FUNC)) | |||
| #define CallNPP_ShutdownProc(FUNC) \ | |||
| (*(FUNC))() | |||
| /* NPP_New */ | |||
| typedef NPError (* NP_LOADDS NPP_NewUPP)(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved); | |||
| #define NewNPP_NewProc(FUNC) \ | |||
| ((NPP_NewUPP) (FUNC)) | |||
| #define CallNPP_NewProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7)) | |||
| /* NPP_Destroy */ | |||
| typedef NPError (* NP_LOADDS NPP_DestroyUPP)(NPP instance, NPSavedData** save); | |||
| #define NewNPP_DestroyProc(FUNC) \ | |||
| ((NPP_DestroyUPP) (FUNC)) | |||
| #define CallNPP_DestroyProc(FUNC, ARG1, ARG2) \ | |||
| (*(FUNC))((ARG1), (ARG2)) | |||
| /* NPP_SetWindow */ | |||
| typedef NPError (* NP_LOADDS NPP_SetWindowUPP)(NPP instance, NPWindow* window); | |||
| #define NewNPP_SetWindowProc(FUNC) \ | |||
| ((NPP_SetWindowUPP) (FUNC)) | |||
| #define CallNPP_SetWindowProc(FUNC, ARG1, ARG2) \ | |||
| (*(FUNC))((ARG1), (ARG2)) | |||
| /* NPP_NewStream */ | |||
| typedef NPError (* NP_LOADDS NPP_NewStreamUPP)(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype); | |||
| #define NewNPP_NewStreamProc(FUNC) \ | |||
| ((NPP_NewStreamUPP) (FUNC)) | |||
| #define CallNPP_NewStreamProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5)) | |||
| /* NPP_DestroyStream */ | |||
| typedef NPError (* NP_LOADDS NPP_DestroyStreamUPP)(NPP instance, NPStream* stream, NPReason reason); | |||
| #define NewNPP_DestroyStreamProc(FUNC) \ | |||
| ((NPP_DestroyStreamUPP) (FUNC)) | |||
| #define CallNPP_DestroyStreamProc(FUNC, NPParg, NPStreamPtr, NPReasonArg) \ | |||
| (*(FUNC))((NPParg), (NPStreamPtr), (NPReasonArg)) | |||
| /* NPP_WriteReady */ | |||
| typedef int32 (* NP_LOADDS NPP_WriteReadyUPP)(NPP instance, NPStream* stream); | |||
| #define NewNPP_WriteReadyProc(FUNC) \ | |||
| ((NPP_WriteReadyUPP) (FUNC)) | |||
| #define CallNPP_WriteReadyProc(FUNC, NPParg, NPStreamPtr) \ | |||
| (*(FUNC))((NPParg), (NPStreamPtr)) | |||
| /* NPP_Write */ | |||
| typedef int32 (* NP_LOADDS NPP_WriteUPP)(NPP instance, NPStream* stream, int32 offset, int32 len, void* buffer); | |||
| #define NewNPP_WriteProc(FUNC) \ | |||
| ((NPP_WriteUPP) (FUNC)) | |||
| #define CallNPP_WriteProc(FUNC, NPParg, NPStreamPtr, offsetArg, lenArg, bufferPtr) \ | |||
| (*(FUNC))((NPParg), (NPStreamPtr), (offsetArg), (lenArg), (bufferPtr)) | |||
| /* NPP_StreamAsFile */ | |||
| typedef void (* NP_LOADDS NPP_StreamAsFileUPP)(NPP instance, NPStream* stream, const char* fname); | |||
| #define NewNPP_StreamAsFileProc(FUNC) \ | |||
| ((NPP_StreamAsFileUPP) (FUNC)) | |||
| #define CallNPP_StreamAsFileProc(FUNC, ARG1, ARG2, ARG3) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3)) | |||
| /* NPP_Print */ | |||
| typedef void (* NP_LOADDS NPP_PrintUPP)(NPP instance, NPPrint* platformPrint); | |||
| #define NewNPP_PrintProc(FUNC) \ | |||
| ((NPP_PrintUPP) (FUNC)) | |||
| #define CallNPP_PrintProc(FUNC, NPParg, NPPrintArg) \ | |||
| (*(FUNC))((NPParg), (NPPrintArg)) | |||
| /* NPP_HandleEvent */ | |||
| typedef int16 (* NP_LOADDS NPP_HandleEventUPP)(NPP instance, void* event); | |||
| #define NewNPP_HandleEventProc(FUNC) \ | |||
| ((NPP_HandleEventUPP) (FUNC)) | |||
| #define CallNPP_HandleEventProc(FUNC, NPParg, voidPtr) \ | |||
| (*(FUNC))((NPParg), (voidPtr)) | |||
| /* NPP_URLNotify */ | |||
| typedef void (* NP_LOADDS NPP_URLNotifyUPP)(NPP instance, const char* url, NPReason reason, void* notifyData); | |||
| #define NewNPP_URLNotifyProc(FUNC) \ | |||
| ((NPP_URLNotifyUPP) (FUNC)) | |||
| #define CallNPP_URLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4)) | |||
| /* NPP_GetValue */ | |||
| typedef NPError (* NP_LOADDS NPP_GetValueUPP)(NPP instance, NPPVariable variable, void *ret_alue); | |||
| #define NewNPP_GetValueProc(FUNC) \ | |||
| ((NPP_GetValueUPP) (FUNC)) | |||
| #define CallNPP_GetValueProc(FUNC, ARG1, ARG2, ARG3) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3)) | |||
| /* NPP_SetValue */ | |||
| typedef NPError (* NP_LOADDS NPP_SetValueUPP)(NPP instance, NPNVariable variable, void *ret_alue); | |||
| #define NewNPP_SetValueProc(FUNC) \ | |||
| ((NPP_SetValueUPP) (FUNC)) | |||
| #define CallNPP_SetValueProc(FUNC, ARG1, ARG2, ARG3) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3)) | |||
| /* | |||
| * Netscape entry points | |||
| */ | |||
| /* NPN_GetValue */ | |||
| typedef NPError (* NP_LOADDS NPN_GetValueUPP)(NPP instance, NPNVariable variable, void *ret_alue); | |||
| #define NewNPN_GetValueProc(FUNC) \ | |||
| ((NPN_GetValueUPP) (FUNC)) | |||
| #define CallNPN_GetValueProc(FUNC, ARG1, ARG2, ARG3) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3)) | |||
| /* NPN_SetValue */ | |||
| typedef NPError (* NP_LOADDS NPN_SetValueUPP)(NPP instance, NPPVariable variable, void *ret_alue); | |||
| #define NewNPN_SetValueProc(FUNC) \ | |||
| ((NPN_SetValueUPP) (FUNC)) | |||
| #define CallNPN_SetValueProc(FUNC, ARG1, ARG2, ARG3) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3)) | |||
| /* NPN_GetUrlNotify */ | |||
| typedef NPError (* NP_LOADDS NPN_GetURLNotifyUPP)(NPP instance, const char* url, const char* window, void* notifyData); | |||
| #define NewNPN_GetURLNotifyProc(FUNC) \ | |||
| ((NPN_GetURLNotifyUPP) (FUNC)) | |||
| #define CallNPN_GetURLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4)) | |||
| /* NPN_PostUrlNotify */ | |||
| typedef NPError (* NP_LOADDS NPN_PostURLNotifyUPP)(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file, void* notifyData); | |||
| #define NewNPN_PostURLNotifyProc(FUNC) \ | |||
| ((NPN_PostURLNotifyUPP) (FUNC)) | |||
| #define CallNPN_PostURLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7)) | |||
| /* NPN_GetUrl */ | |||
| typedef NPError (* NP_LOADDS NPN_GetURLUPP)(NPP instance, const char* url, const char* window); | |||
| #define NewNPN_GetURLProc(FUNC) \ | |||
| ((NPN_GetURLUPP) (FUNC)) | |||
| #define CallNPN_GetURLProc(FUNC, ARG1, ARG2, ARG3) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3)) | |||
| /* NPN_PostUrl */ | |||
| typedef NPError (* NP_LOADDS NPN_PostURLUPP)(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file); | |||
| #define NewNPN_PostURLProc(FUNC) \ | |||
| ((NPN_PostURLUPP) (FUNC)) | |||
| #define CallNPN_PostURLProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6)) | |||
| /* NPN_RequestRead */ | |||
| typedef NPError (* NP_LOADDS NPN_RequestReadUPP)(NPStream* stream, NPByteRange* rangeList); | |||
| #define NewNPN_RequestReadProc(FUNC) \ | |||
| ((NPN_RequestReadUPP) (FUNC)) | |||
| #define CallNPN_RequestReadProc(FUNC, stream, range) \ | |||
| (*(FUNC))((stream), (range)) | |||
| /* NPN_NewStream */ | |||
| typedef NPError (* NP_LOADDS NPN_NewStreamUPP)(NPP instance, NPMIMEType type, const char* window, NPStream** stream); | |||
| #define NewNPN_NewStreamProc(FUNC) \ | |||
| ((NPN_NewStreamUPP) (FUNC)) | |||
| #define CallNPN_NewStreamProc(FUNC, npp, type, window, stream) \ | |||
| (*(FUNC))((npp), (type), (window), (stream)) | |||
| /* NPN_Write */ | |||
| typedef int32 (* NP_LOADDS NPN_WriteUPP)(NPP instance, NPStream* stream, int32 len, void* buffer); | |||
| #define NewNPN_WriteProc(FUNC) \ | |||
| ((NPN_WriteUPP) (FUNC)) | |||
| #define CallNPN_WriteProc(FUNC, npp, stream, len, buffer) \ | |||
| (*(FUNC))((npp), (stream), (len), (buffer)) | |||
| /* NPN_DestroyStream */ | |||
| typedef NPError (* NP_LOADDS NPN_DestroyStreamUPP)(NPP instance, NPStream* stream, NPReason reason); | |||
| #define NewNPN_DestroyStreamProc(FUNC) \ | |||
| ((NPN_DestroyStreamUPP) (FUNC)) | |||
| #define CallNPN_DestroyStreamProc(FUNC, npp, stream, reason) \ | |||
| (*(FUNC))((npp), (stream), (reason)) | |||
| /* NPN_Status */ | |||
| typedef void (* NP_LOADDS NPN_StatusUPP)(NPP instance, const char* message); | |||
| #define NewNPN_StatusProc(FUNC) \ | |||
| ((NPN_StatusUPP) (FUNC)) | |||
| #define CallNPN_StatusProc(FUNC, npp, msg) \ | |||
| (*(FUNC))((npp), (msg)) | |||
| /* NPN_UserAgent */ | |||
| typedef const char* (* NP_LOADDS NPN_UserAgentUPP)(NPP instance); | |||
| #define NewNPN_UserAgentProc(FUNC) \ | |||
| ((NPN_UserAgentUPP) (FUNC)) | |||
| #define CallNPN_UserAgentProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_MemAlloc */ | |||
| typedef void* (* NP_LOADDS NPN_MemAllocUPP)(uint32 size); | |||
| #define NewNPN_MemAllocProc(FUNC) \ | |||
| ((NPN_MemAllocUPP) (FUNC)) | |||
| #define CallNPN_MemAllocProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN__MemFree */ | |||
| typedef void (* NP_LOADDS NPN_MemFreeUPP)(void* ptr); | |||
| #define NewNPN_MemFreeProc(FUNC) \ | |||
| ((NPN_MemFreeUPP) (FUNC)) | |||
| #define CallNPN_MemFreeProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_MemFlush */ | |||
| typedef uint32 (* NP_LOADDS NPN_MemFlushUPP)(uint32 size); | |||
| #define NewNPN_MemFlushProc(FUNC) \ | |||
| ((NPN_MemFlushUPP) (FUNC)) | |||
| #define CallNPN_MemFlushProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_ReloadPlugins */ | |||
| typedef void (* NP_LOADDS NPN_ReloadPluginsUPP)(NPBool reloadPages); | |||
| #define NewNPN_ReloadPluginsProc(FUNC) \ | |||
| ((NPN_ReloadPluginsUPP) (FUNC)) | |||
| #define CallNPN_ReloadPluginsProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_GetJavaEnv */ | |||
| typedef JRIEnv* (* NP_LOADDS NPN_GetJavaEnvUPP)(void); | |||
| #define NewNPN_GetJavaEnvProc(FUNC) \ | |||
| ((NPN_GetJavaEnvUPP) (FUNC)) | |||
| #define CallNPN_GetJavaEnvProc(FUNC) \ | |||
| (*(FUNC))() | |||
| /* NPN_GetJavaPeer */ | |||
| typedef jref (* NP_LOADDS NPN_GetJavaPeerUPP)(NPP instance); | |||
| #define NewNPN_GetJavaPeerProc(FUNC) \ | |||
| ((NPN_GetJavaPeerUPP) (FUNC)) | |||
| #define CallNPN_GetJavaPeerProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_InvalidateRect */ | |||
| typedef void (* NP_LOADDS NPN_InvalidateRectUPP)(NPP instance, NPRect *rect); | |||
| #define NewNPN_InvalidateRectProc(FUNC) \ | |||
| ((NPN_InvalidateRectUPP) (FUNC)) | |||
| #define CallNPN_InvalidateRectProc(FUNC, ARG1, ARG2) \ | |||
| (*(FUNC))((ARG1), (ARG2)) | |||
| /* NPN_InvalidateRegion */ | |||
| typedef void (* NP_LOADDS NPN_InvalidateRegionUPP)(NPP instance, NPRegion region); | |||
| #define NewNPN_InvalidateRegionProc(FUNC) \ | |||
| ((NPN_InvalidateRegionUPP) (FUNC)) | |||
| #define CallNPN_InvalidateRegionProc(FUNC, ARG1, ARG2) \ | |||
| (*(FUNC))((ARG1), (ARG2)) | |||
| /* NPN_ForceRedraw */ | |||
| typedef void (* NP_LOADDS NPN_ForceRedrawUPP)(NPP instance); | |||
| #define NewNPN_ForceRedrawProc(FUNC) \ | |||
| ((NPN_ForceRedrawUPP) (FUNC)) | |||
| #define CallNPN_ForceRedrawProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_GetStringIdentifier */ | |||
| typedef NPIdentifier (* NP_LOADDS NPN_GetStringIdentifierUPP)(const NPUTF8* name); | |||
| #define NewNPN_GetStringIdentifierProc(FUNC) \ | |||
| ((NPN_GetStringIdentifierUPP) (FUNC)) | |||
| #define CallNPN_GetStringIdentifierProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_GetStringIdentifiers */ | |||
| typedef void (* NP_LOADDS NPN_GetStringIdentifiersUPP)(const NPUTF8** names, | |||
| int32_t nameCount, | |||
| NPIdentifier* identifiers); | |||
| #define NewNPN_GetStringIdentifiersProc(FUNC) \ | |||
| ((NPN_GetStringIdentifiersUPP) (FUNC)) | |||
| #define CallNPN_GetStringIdentifiersProc(FUNC, ARG1, ARG2, ARG3) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3)) | |||
| /* NPN_GetIntIdentifier */ | |||
| typedef NPIdentifier (* NP_LOADDS NPN_GetIntIdentifierUPP)(int32_t intid); | |||
| #define NewNPN_GetIntIdentifierProc(FUNC) \ | |||
| ((NPN_GetIntIdentifierUPP) (FUNC)) | |||
| #define CallNPN_GetIntIdentifierProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_IdentifierIsString */ | |||
| typedef bool (* NP_LOADDS NPN_IdentifierIsStringUPP)(NPIdentifier identifier); | |||
| #define NewNPN_IdentifierIsStringProc(FUNC) \ | |||
| ((NPN_IdentifierIsStringUPP) (FUNC)) | |||
| #define CallNPN_IdentifierIsStringProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_UTF8FromIdentifier */ | |||
| typedef NPUTF8* (* NP_LOADDS NPN_UTF8FromIdentifierUPP)(NPIdentifier identifier); | |||
| #define NewNPN_UTF8FromIdentifierProc(FUNC) \ | |||
| ((NPN_UTF8FromIdentifierUPP) (FUNC)) | |||
| #define CallNPN_UTF8FromIdentifierProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_IntFromIdentifier */ | |||
| typedef int32_t (* NP_LOADDS NPN_IntFromIdentifierUPP)(NPIdentifier identifier); | |||
| #define NewNPN_IntFromIdentifierProc(FUNC) \ | |||
| ((NPN_IntFromIdentifierUPP) (FUNC)) | |||
| #define CallNPN_IntFromIdentifierProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_CreateObject */ | |||
| typedef NPObject* (* NP_LOADDS NPN_CreateObjectUPP)(NPP npp, NPClass *aClass); | |||
| #define NewNPN_CreateObjectProc(FUNC) \ | |||
| ((NPN_CreateObjectUPP) (FUNC)) | |||
| #define CallNPN_CreateObjectProc(FUNC, ARG1, ARG2) \ | |||
| (*(FUNC))((ARG1), (ARG2)) | |||
| /* NPN_RetainObject */ | |||
| typedef NPObject* (* NP_LOADDS NPN_RetainObjectUPP)(NPObject *obj); | |||
| #define NewNPN_RetainObjectProc(FUNC) \ | |||
| ((NPN_RetainObjectUPP) (FUNC)) | |||
| #define CallNPN_RetainObjectProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_ReleaseObject */ | |||
| typedef void (* NP_LOADDS NPN_ReleaseObjectUPP)(NPObject *obj); | |||
| #define NewNPN_ReleaseObjectProc(FUNC) \ | |||
| ((NPN_ReleaseObjectUPP) (FUNC)) | |||
| #define CallNPN_ReleaseObjectProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_Invoke */ | |||
| typedef bool (* NP_LOADDS NPN_InvokeUPP)(NPP npp, NPObject* obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result); | |||
| #define NewNPN_InvokeProc(FUNC) \ | |||
| ((NPN_InvokeUPP) (FUNC)) | |||
| #define CallNPN_InvokeProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6)) | |||
| /* NPN_InvokeDefault */ | |||
| typedef bool (* NP_LOADDS NPN_InvokeDefaultUPP)(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result); | |||
| #define NewNPN_InvokeDefaultProc(FUNC) \ | |||
| ((NPN_InvokeDefaultUPP) (FUNC)) | |||
| #define CallNPN_InvokeDefaultProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5)) | |||
| /* NPN_Evaluate */ | |||
| typedef bool (* NP_LOADDS NPN_EvaluateUPP)(NPP npp, NPObject *obj, NPString *script, NPVariant *result); | |||
| #define NewNPN_EvaluateProc(FUNC) \ | |||
| ((NPN_EvaluateUPP) (FUNC)) | |||
| #define CallNPN_EvaluateProc(FUNC, ARG1, ARG2, ARG3, ARG4) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4)) | |||
| /* NPN_GetProperty */ | |||
| typedef bool (* NP_LOADDS NPN_GetPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName, NPVariant *result); | |||
| #define NewNPN_GetPropertyProc(FUNC) \ | |||
| ((NPN_GetPropertyUPP) (FUNC)) | |||
| #define CallNPN_GetPropertyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4)) | |||
| /* NPN_SetProperty */ | |||
| typedef bool (* NP_LOADDS NPN_SetPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName, const NPVariant *value); | |||
| #define NewNPN_SetPropertyProc(FUNC) \ | |||
| ((NPN_SetPropertyUPP) (FUNC)) | |||
| #define CallNPN_SetPropertyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4)) | |||
| /* NPN_RemoveProperty */ | |||
| typedef bool (* NP_LOADDS NPN_RemovePropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName); | |||
| #define NewNPN_RemovePropertyProc(FUNC) \ | |||
| ((NPN_RemovePropertyUPP) (FUNC)) | |||
| #define CallNPN_RemovePropertyProc(FUNC, ARG1, ARG2, ARG3) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3)) | |||
| /* NPN_HasProperty */ | |||
| typedef bool (* NP_LOADDS NPN_HasPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName); | |||
| #define NewNPN_HasPropertyProc(FUNC) \ | |||
| ((NPN_HasPropertyUPP) (FUNC)) | |||
| #define CallNPN_HasPropertyProc(FUNC, ARG1, ARG2, ARG3) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3)) | |||
| /* NPN_HasMethod */ | |||
| typedef bool (* NP_LOADDS NPN_HasMethodUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName); | |||
| #define NewNPN_HasMethodProc(FUNC) \ | |||
| ((NPN_HasMethodUPP) (FUNC)) | |||
| #define CallNPN_HasMethodProc(FUNC, ARG1, ARG2, ARG3) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3)) | |||
| /* NPN_ReleaseVariantValue */ | |||
| typedef void (* NP_LOADDS NPN_ReleaseVariantValueUPP)(NPVariant *variant); | |||
| #define NewNPN_ReleaseVariantValueProc(FUNC) \ | |||
| ((NPN_ReleaseVariantValueUPP) (FUNC)) | |||
| #define CallNPN_ReleaseVariantValueProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_SetException */ | |||
| typedef void (* NP_LOADDS NPN_SetExceptionUPP)(NPObject *obj, const NPUTF8 *message); | |||
| #define NewNPN_SetExceptionProc(FUNC) \ | |||
| ((NPN_SetExceptionUPP) (FUNC)) | |||
| #define CallNPN_SetExceptionProc(FUNC, ARG1, ARG2) \ | |||
| (*(FUNC))((ARG1), (ARG2)) | |||
| /* NPN_PushPopupsEnabledStateUPP */ | |||
| typedef bool (* NP_LOADDS NPN_PushPopupsEnabledStateUPP)(NPP npp, NPBool enabled); | |||
| #define NewNPN_PushPopupsEnabledStateProc(FUNC) \ | |||
| ((NPN_PushPopupsEnabledStateUPP) (FUNC)) | |||
| #define CallNPN_PushPopupsEnabledStateProc(FUNC, ARG1, ARG2) \ | |||
| (*(FUNC))((ARG1), (ARG2)) | |||
| /* NPN_PopPopupsEnabledState */ | |||
| typedef bool (* NP_LOADDS NPN_PopPopupsEnabledStateUPP)(NPP npp); | |||
| #define NewNPN_PopPopupsEnabledStateProc(FUNC) \ | |||
| ((NPN_PopPopupsEnabledStateUPP) (FUNC)) | |||
| #define CallNPN_PopPopupsEnabledStateProc(FUNC, ARG1) \ | |||
| (*(FUNC))((ARG1)) | |||
| /* NPN_Enumerate */ | |||
| typedef bool (* NP_LOADDS NPN_EnumerateUPP)(NPP npp, NPObject *obj, NPIdentifier **identifier, uint32_t *count); | |||
| #define NewNPN_EnumerateProc(FUNC) \ | |||
| ((NPN_EnumerateUPP) (FUNC)) | |||
| #define CallNPN_EnumerateProc(FUNC, ARG1, ARG2, ARG3, ARG4) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4)) | |||
| /* NPN_PluginThreadAsyncCall */ | |||
| typedef void (* NP_LOADDS NPN_PluginThreadAsyncCallUPP)(NPP instance, void (*func)(void *), void *userData); | |||
| #define NewNPN_PluginThreadAsyncCallProc(FUNC) \ | |||
| ((NPN_PluginThreadAsyncCallUPP) (FUNC)) | |||
| #define CallNPN_PluginThreadAsyncCallProc(FUNC, ARG1, ARG2, ARG3) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3)) | |||
| /* NPN_Construct */ | |||
| typedef bool (* NP_LOADDS NPN_ConstructUPP)(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result); | |||
| #define NewNPN_ConstructProc(FUNC) \ | |||
| ((NPN_ConstructUPP) (FUNC)) | |||
| #define CallNPN_ConstructProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \ | |||
| (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5)) | |||
| /****************************************************************************************** | |||
| * The actual plugin function table definitions | |||
| *******************************************************************************************/ | |||
| typedef struct _NPPluginFuncs { | |||
| uint16 size; | |||
| uint16 version; | |||
| NPP_NewUPP newp; | |||
| NPP_DestroyUPP destroy; | |||
| NPP_SetWindowUPP setwindow; | |||
| NPP_NewStreamUPP newstream; | |||
| NPP_DestroyStreamUPP destroystream; | |||
| NPP_StreamAsFileUPP asfile; | |||
| NPP_WriteReadyUPP writeready; | |||
| NPP_WriteUPP write; | |||
| NPP_PrintUPP print; | |||
| NPP_HandleEventUPP event; | |||
| NPP_URLNotifyUPP urlnotify; | |||
| JRIGlobalRef javaClass; | |||
| NPP_GetValueUPP getvalue; | |||
| NPP_SetValueUPP setvalue; | |||
| } NPPluginFuncs; | |||
| typedef struct _NPNetscapeFuncs { | |||
| uint16 size; | |||
| uint16 version; | |||
| NPN_GetURLUPP geturl; | |||
| NPN_PostURLUPP posturl; | |||
| NPN_RequestReadUPP requestread; | |||
| NPN_NewStreamUPP newstream; | |||
| NPN_WriteUPP write; | |||
| NPN_DestroyStreamUPP destroystream; | |||
| NPN_StatusUPP status; | |||
| NPN_UserAgentUPP uagent; | |||
| NPN_MemAllocUPP memalloc; | |||
| NPN_MemFreeUPP memfree; | |||
| NPN_MemFlushUPP memflush; | |||
| NPN_ReloadPluginsUPP reloadplugins; | |||
| NPN_GetJavaEnvUPP getJavaEnv; | |||
| NPN_GetJavaPeerUPP getJavaPeer; | |||
| NPN_GetURLNotifyUPP geturlnotify; | |||
| NPN_PostURLNotifyUPP posturlnotify; | |||
| NPN_GetValueUPP getvalue; | |||
| NPN_SetValueUPP setvalue; | |||
| NPN_InvalidateRectUPP invalidaterect; | |||
| NPN_InvalidateRegionUPP invalidateregion; | |||
| NPN_ForceRedrawUPP forceredraw; | |||
| NPN_GetStringIdentifierUPP getstringidentifier; | |||
| NPN_GetStringIdentifiersUPP getstringidentifiers; | |||
| NPN_GetIntIdentifierUPP getintidentifier; | |||
| NPN_IdentifierIsStringUPP identifierisstring; | |||
| NPN_UTF8FromIdentifierUPP utf8fromidentifier; | |||
| NPN_IntFromIdentifierUPP intfromidentifier; | |||
| NPN_CreateObjectUPP createobject; | |||
| NPN_RetainObjectUPP retainobject; | |||
| NPN_ReleaseObjectUPP releaseobject; | |||
| NPN_InvokeUPP invoke; | |||
| NPN_InvokeDefaultUPP invokeDefault; | |||
| NPN_EvaluateUPP evaluate; | |||
| NPN_GetPropertyUPP getproperty; | |||
| NPN_SetPropertyUPP setproperty; | |||
| NPN_RemovePropertyUPP removeproperty; | |||
| NPN_HasPropertyUPP hasproperty; | |||
| NPN_HasMethodUPP hasmethod; | |||
| NPN_ReleaseVariantValueUPP releasevariantvalue; | |||
| NPN_SetExceptionUPP setexception; | |||
| NPN_PushPopupsEnabledStateUPP pushpopupsenabledstate; | |||
| NPN_PopPopupsEnabledStateUPP poppopupsenabledstate; | |||
| NPN_EnumerateUPP enumerate; | |||
| NPN_PluginThreadAsyncCallUPP pluginthreadasynccall; | |||
| NPN_ConstructUPP construct; | |||
| } NPNetscapeFuncs; | |||
| #ifdef XP_MACOSX | |||
| /****************************************************************************************** | |||
| * Mac platform-specific plugin glue stuff | |||
| *******************************************************************************************/ | |||
| /* | |||
| * Main entry point of the plugin. | |||
| * This routine will be called when the plugin is loaded. The function | |||
| * tables are passed in and the plugin fills in the NPPluginFuncs table | |||
| * and NPPShutdownUPP for Netscape's use. | |||
| */ | |||
| typedef NPError (* NP_LOADDS NPP_MainEntryUPP)(NPNetscapeFuncs*, NPPluginFuncs*, NPP_ShutdownUPP*); | |||
| #define NewNPP_MainEntryProc(FUNC) \ | |||
| ((NPP_MainEntryUPP) (FUNC)) | |||
| #define CallNPP_MainEntryProc(FUNC, netscapeFunc, pluginFunc, shutdownUPP) \ | |||
| (*(FUNC))((netscapeFunc), (pluginFunc), (shutdownUPP)) | |||
| /* | |||
| * Mac OS X version(s) of NP_GetMIMEDescription(const char *) | |||
| * These can be called to retreive MIME information from the plugin dynamically | |||
| * | |||
| * Note: For compatibility with Quicktime, BPSupportedMIMEtypes is another way | |||
| * to get mime info from the plugin only on OSX and may not be supported | |||
| * in furture version -- use NP_GetMIMEDescription instead | |||
| */ | |||
| enum | |||
| { | |||
| kBPSupportedMIMETypesStructVers_1 = 1 | |||
| }; | |||
| typedef struct _BPSupportedMIMETypes | |||
| { | |||
| SInt32 structVersion; /* struct version */ | |||
| Handle typeStrings; /* STR# formated handle, allocated by plug-in */ | |||
| Handle infoStrings; /* STR# formated handle, allocated by plug-in */ | |||
| } BPSupportedMIMETypes; | |||
| OSErr BP_GetSupportedMIMETypes(BPSupportedMIMETypes *mimeInfo, UInt32 flags); | |||
| /* NP_GetMIMEDescription */ | |||
| #define NP_GETMIMEDESCRIPTION_NAME "NP_GetMIMEDescription" | |||
| typedef const char* (* NP_LOADDS NP_GetMIMEDescriptionUPP)(); | |||
| #define NewNP_GetMIMEDescEntryProc(FUNC) \ | |||
| ((NP_GetMIMEDescriptionUPP) (FUNC)) | |||
| #define CallNP_GetMIMEDescEntryProc(FUNC) \ | |||
| (*(FUNC))() | |||
| /* BP_GetSupportedMIMETypes */ | |||
| typedef OSErr (* NP_LOADDS BP_GetSupportedMIMETypesUPP)(BPSupportedMIMETypes*, UInt32); | |||
| #define NewBP_GetSupportedMIMETypesEntryProc(FUNC) \ | |||
| ((BP_GetSupportedMIMETypesUPP) (FUNC)) | |||
| #define CallBP_GetMIMEDescEntryProc(FUNC, mimeInfo, flags) \ | |||
| (*(FUNC))((mimeInfo), (flags)) | |||
| #endif /* XP_MACOSX */ | |||
| #if defined(_WINDOWS) | |||
| #define OSCALL WINAPI | |||
| #else | |||
| #if defined(__OS2__) | |||
| #define OSCALL _System | |||
| #else | |||
| #define OSCALL | |||
| #endif | |||
| #endif | |||
| #if defined(XP_UNIX) | |||
| /* GCC 3.3 and later support the visibility attribute. */ | |||
| #if defined(__GNUC__) && \ | |||
| ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) | |||
| #define NP_VISIBILITY_DEFAULT __attribute__((visibility("default"))) | |||
| #else | |||
| #define NP_VISIBILITY_DEFAULT | |||
| #endif | |||
| #define NP_EXPORT(__type) NP_VISIBILITY_DEFAULT __type | |||
| #endif | |||
| #if defined( _WINDOWS ) || defined (__OS2__) | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #endif | |||
| /* plugin meta member functions */ | |||
| #if defined(__OS2__) | |||
| typedef struct _NPPluginData { /* Alternate OS2 Plugin interface */ | |||
| char *pMimeTypes; | |||
| char *pFileExtents; | |||
| char *pFileOpenTemplate; | |||
| char *pProductName; | |||
| char *pProductDescription; | |||
| unsigned long dwProductVersionMS; | |||
| unsigned long dwProductVersionLS; | |||
| } NPPluginData; | |||
| NPError OSCALL NP_GetPluginData(NPPluginData * pPluginData); | |||
| #endif | |||
| NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* pFuncs); | |||
| NPError OSCALL NP_Initialize(NPNetscapeFuncs* pFuncs); | |||
| NPError OSCALL NP_Shutdown(); | |||
| char* NP_GetMIMEDescription(); | |||
| #ifdef __cplusplus | |||
| } | |||
| #endif | |||
| #endif /* _WINDOWS || __OS2__ */ | |||
| #if defined(__OS2__) | |||
| #pragma pack() | |||
| #endif | |||
| #ifdef XP_UNIX | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #endif | |||
| /* plugin meta member functions */ | |||
| NP_EXPORT(char*) NP_GetMIMEDescription(void); | |||
| NP_EXPORT(NPError) NP_Initialize(NPNetscapeFuncs*, NPPluginFuncs*); | |||
| NP_EXPORT(NPError) NP_Shutdown(void); | |||
| NP_EXPORT(NPError) NP_GetValue(void *future, NPPVariable aVariable, void *aValue); | |||
| #ifdef __cplusplus | |||
| } | |||
| #endif | |||
| #endif /* XP_UNIX */ | |||
| #endif /* _NPUPP_H_ */ | |||
| @@ -0,0 +1,252 @@ | |||
| /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | |||
| /* ***** BEGIN LICENSE BLOCK ***** | |||
| * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |||
| * | |||
| * The contents of this file are subject to the Mozilla Public License Version | |||
| * 1.1 (the "License"); you may not use this file except in compliance with | |||
| * the License. You may obtain a copy of the License at | |||
| * http://www.mozilla.org/MPL/ | |||
| * | |||
| * Software distributed under the License is distributed on an "AS IS" basis, | |||
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |||
| * for the specific language governing rights and limitations under the | |||
| * License. | |||
| * | |||
| * The Original Code is the Netscape Portable Runtime (NSPR). | |||
| * | |||
| * The Initial Developer of the Original Code is | |||
| * Netscape Communications Corporation. | |||
| * Portions created by the Initial Developer are Copyright (C) 1998-2000 | |||
| * the Initial Developer. All Rights Reserved. | |||
| * | |||
| * Contributor(s): | |||
| * | |||
| * Alternatively, the contents of this file may be used under the terms of | |||
| * either the GNU General Public License Version 2 or later (the "GPL"), or | |||
| * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | |||
| * in which case the provisions of the GPL or the LGPL are applicable instead | |||
| * of those above. If you wish to allow use of your version of this file only | |||
| * under the terms of either the GPL or the LGPL, and not to allow others to | |||
| * use your version of this file under the terms of the MPL, indicate your | |||
| * decision by deleting the provisions above and replace them with the notice | |||
| * and other provisions required by the GPL or the LGPL. If you do not delete | |||
| * the provisions above, a recipient may use your version of this file under | |||
| * the terms of any one of the MPL, the GPL or the LGPL. | |||
| * | |||
| * ***** END LICENSE BLOCK ***** */ | |||
| /* | |||
| * This header typedefs the old 'native' types to the new PR<type>s. | |||
| * These definitions are scheduled to be eliminated at the earliest | |||
| * possible time. The NSPR API is implemented and documented using | |||
| * the new definitions. | |||
| */ | |||
| #if !defined(PROTYPES_H) | |||
| #define PROTYPES_H | |||
| typedef PRUintn uintn; | |||
| #ifndef _XP_Core_ | |||
| typedef PRIntn intn; | |||
| #endif | |||
| /* | |||
| * It is trickier to define uint, int8, uint8, int16, uint16, | |||
| * int32, uint32, int64, and uint64 because some of these int | |||
| * types are defined by standard header files on some platforms. | |||
| * Our strategy here is to include all such standard headers | |||
| * first, and then define these int types only if they are not | |||
| * defined by those standard headers. | |||
| */ | |||
| /* | |||
| * BeOS defines all the int types below in its standard header | |||
| * file SupportDefs.h. | |||
| */ | |||
| #ifdef XP_BEOS | |||
| #include <support/SupportDefs.h> | |||
| #endif | |||
| /* | |||
| * OpenVMS defines all the int types below in its standard | |||
| * header files ints.h and types.h. | |||
| */ | |||
| #ifdef VMS | |||
| #include <ints.h> | |||
| #include <types.h> | |||
| #endif | |||
| /* | |||
| * SVR4 typedef of uint is commonly found on UNIX machines. | |||
| * | |||
| * On AIX 4.3, sys/inttypes.h (which is included by sys/types.h) | |||
| * defines the types int8, int16, int32, and int64. | |||
| */ | |||
| #ifdef XP_UNIX | |||
| #include <sys/types.h> | |||
| #endif | |||
| /* model.h on HP-UX defines int8, int16, and int32. */ | |||
| #ifdef HPUX | |||
| #include <model.h> | |||
| #endif | |||
| /* | |||
| * uint | |||
| */ | |||
| #if !defined(XP_BEOS) && !defined(VMS) \ | |||
| && !defined(XP_UNIX) || defined(NTO) | |||
| typedef PRUintn uint; | |||
| #endif | |||
| /* | |||
| * uint64 | |||
| */ | |||
| #if !defined(XP_BEOS) && !defined(VMS) | |||
| typedef PRUint64 uint64; | |||
| #endif | |||
| /* | |||
| * uint32 | |||
| */ | |||
| #if !defined(XP_BEOS) && !defined(VMS) | |||
| #if !defined(XP_MAC) && !defined(_WIN32) && !defined(XP_OS2) && !defined(NTO) | |||
| typedef PRUint32 uint32; | |||
| #else | |||
| typedef unsigned long uint32; | |||
| #endif | |||
| #endif | |||
| /* | |||
| * uint16 | |||
| */ | |||
| #if !defined(XP_BEOS) && !defined(VMS) | |||
| typedef PRUint16 uint16; | |||
| #endif | |||
| /* | |||
| * uint8 | |||
| */ | |||
| #if !defined(XP_BEOS) && !defined(VMS) | |||
| typedef PRUint8 uint8; | |||
| #endif | |||
| /* | |||
| * int64 | |||
| */ | |||
| #if !defined(XP_BEOS) && !defined(VMS) \ | |||
| && !defined(_PR_AIX_HAVE_BSD_INT_TYPES) | |||
| typedef PRInt64 int64; | |||
| #endif | |||
| /* | |||
| * int32 | |||
| */ | |||
| #if !defined(XP_BEOS) && !defined(VMS) \ | |||
| && !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \ | |||
| && !defined(HPUX) | |||
| #if !defined(XP_MAC) && !defined(_WIN32) && !defined(XP_OS2) && !defined(NTO) | |||
| typedef PRInt32 int32; | |||
| #else | |||
| typedef long int32; | |||
| #endif | |||
| #endif | |||
| /* | |||
| * int16 | |||
| */ | |||
| #if !defined(XP_BEOS) && !defined(VMS) \ | |||
| && !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \ | |||
| && !defined(HPUX) | |||
| typedef PRInt16 int16; | |||
| #endif | |||
| /* | |||
| * int8 | |||
| */ | |||
| #if !defined(XP_BEOS) && !defined(VMS) \ | |||
| && !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \ | |||
| && !defined(HPUX) | |||
| typedef PRInt8 int8; | |||
| #endif | |||
| typedef PRFloat64 float64; | |||
| typedef PRUptrdiff uptrdiff_t; | |||
| typedef PRUword uprword_t; | |||
| typedef PRWord prword_t; | |||
| /* Re: prbit.h */ | |||
| #define TEST_BIT PR_TEST_BIT | |||
| #define SET_BIT PR_SET_BIT | |||
| #define CLEAR_BIT PR_CLEAR_BIT | |||
| /* Re: prarena.h->plarena.h */ | |||
| #define PRArena PLArena | |||
| #define PRArenaPool PLArenaPool | |||
| #define PRArenaStats PLArenaStats | |||
| #define PR_ARENA_ALIGN PL_ARENA_ALIGN | |||
| #define PR_INIT_ARENA_POOL PL_INIT_ARENA_POOL | |||
| #define PR_ARENA_ALLOCATE PL_ARENA_ALLOCATE | |||
| #define PR_ARENA_GROW PL_ARENA_GROW | |||
| #define PR_ARENA_MARK PL_ARENA_MARK | |||
| #define PR_CLEAR_UNUSED PL_CLEAR_UNUSED | |||
| #define PR_CLEAR_ARENA PL_CLEAR_ARENA | |||
| #define PR_ARENA_RELEASE PL_ARENA_RELEASE | |||
| #define PR_COUNT_ARENA PL_COUNT_ARENA | |||
| #define PR_ARENA_DESTROY PL_ARENA_DESTROY | |||
| #define PR_InitArenaPool PL_InitArenaPool | |||
| #define PR_FreeArenaPool PL_FreeArenaPool | |||
| #define PR_FinishArenaPool PL_FinishArenaPool | |||
| #define PR_CompactArenaPool PL_CompactArenaPool | |||
| #define PR_ArenaFinish PL_ArenaFinish | |||
| #define PR_ArenaAllocate PL_ArenaAllocate | |||
| #define PR_ArenaGrow PL_ArenaGrow | |||
| #define PR_ArenaRelease PL_ArenaRelease | |||
| #define PR_ArenaCountAllocation PL_ArenaCountAllocation | |||
| #define PR_ArenaCountInplaceGrowth PL_ArenaCountInplaceGrowth | |||
| #define PR_ArenaCountGrowth PL_ArenaCountGrowth | |||
| #define PR_ArenaCountRelease PL_ArenaCountRelease | |||
| #define PR_ArenaCountRetract PL_ArenaCountRetract | |||
| /* Re: prhash.h->plhash.h */ | |||
| #define PRHashEntry PLHashEntry | |||
| #define PRHashTable PLHashTable | |||
| #define PRHashNumber PLHashNumber | |||
| #define PRHashFunction PLHashFunction | |||
| #define PRHashComparator PLHashComparator | |||
| #define PRHashEnumerator PLHashEnumerator | |||
| #define PRHashAllocOps PLHashAllocOps | |||
| #define PR_NewHashTable PL_NewHashTable | |||
| #define PR_HashTableDestroy PL_HashTableDestroy | |||
| #define PR_HashTableRawLookup PL_HashTableRawLookup | |||
| #define PR_HashTableRawAdd PL_HashTableRawAdd | |||
| #define PR_HashTableRawRemove PL_HashTableRawRemove | |||
| #define PR_HashTableAdd PL_HashTableAdd | |||
| #define PR_HashTableRemove PL_HashTableRemove | |||
| #define PR_HashTableEnumerateEntries PL_HashTableEnumerateEntries | |||
| #define PR_HashTableLookup PL_HashTableLookup | |||
| #define PR_HashTableDump PL_HashTableDump | |||
| #define PR_HashString PL_HashString | |||
| #define PR_CompareStrings PL_CompareStrings | |||
| #define PR_CompareValues PL_CompareValues | |||
| #if defined(XP_MAC) | |||
| #ifndef TRUE /* Mac standard is lower case true */ | |||
| #define TRUE 1 | |||
| #endif | |||
| #ifndef FALSE /* Mac standard is lower case false */ | |||
| #define FALSE 0 | |||
| #endif | |||
| #endif | |||
| #endif /* !defined(PROTYPES_H) */ | |||
| @@ -0,0 +1,300 @@ | |||
| /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | |||
| /* ***** BEGIN LICENSE BLOCK ***** | |||
| * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |||
| * | |||
| * The contents of this file are subject to the Mozilla Public License Version | |||
| * 1.1 (the "License"); you may not use this file except in compliance with | |||
| * the License. You may obtain a copy of the License at | |||
| * http://www.mozilla.org/MPL/ | |||
| * | |||
| * Software distributed under the License is distributed on an "AS IS" basis, | |||
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |||
| * for the specific language governing rights and limitations under the | |||
| * License. | |||
| * | |||
| * The Original Code is the Netscape Portable Runtime (NSPR). | |||
| * | |||
| * The Initial Developer of the Original Code is | |||
| * Netscape Communications Corporation. | |||
| * Portions created by the Initial Developer are Copyright (C) 1998-2000 | |||
| * the Initial Developer. All Rights Reserved. | |||
| * | |||
| * Contributor(s): | |||
| * | |||
| * Alternatively, the contents of this file may be used under the terms of | |||
| * either the GNU General Public License Version 2 or later (the "GPL"), or | |||
| * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | |||
| * in which case the provisions of the GPL or the LGPL are applicable instead | |||
| * of those above. If you wish to allow use of your version of this file only | |||
| * under the terms of either the GPL or the LGPL, and not to allow others to | |||
| * use your version of this file under the terms of the MPL, indicate your | |||
| * decision by deleting the provisions above and replace them with the notice | |||
| * and other provisions required by the GPL or the LGPL. If you do not delete | |||
| * the provisions above, a recipient may use your version of this file under | |||
| * the terms of any one of the MPL, the GPL or the LGPL. | |||
| * | |||
| * ***** END LICENSE BLOCK ***** */ | |||
| #ifndef nspr_cpucfg___ | |||
| #define nspr_cpucfg___ | |||
| #ifndef XP_PC | |||
| #define XP_PC | |||
| #endif | |||
| #ifndef WIN32 | |||
| #define WIN32 | |||
| #endif | |||
| #ifndef WIN95 | |||
| #define WIN95 | |||
| #endif | |||
| #define PR_AF_INET6 23 /* same as AF_INET6 */ | |||
| #if defined(_M_IX86) || defined(_X86_) | |||
| #define IS_LITTLE_ENDIAN 1 | |||
| #undef IS_BIG_ENDIAN | |||
| #define PR_BYTES_PER_BYTE 1 | |||
| #define PR_BYTES_PER_SHORT 2 | |||
| #define PR_BYTES_PER_INT 4 | |||
| #define PR_BYTES_PER_INT64 8 | |||
| #define PR_BYTES_PER_LONG 4 | |||
| #define PR_BYTES_PER_FLOAT 4 | |||
| #define PR_BYTES_PER_WORD 4 | |||
| #define PR_BYTES_PER_DWORD 8 | |||
| #define PR_BYTES_PER_DOUBLE 8 | |||
| #define PR_BITS_PER_BYTE 8 | |||
| #define PR_BITS_PER_SHORT 16 | |||
| #define PR_BITS_PER_INT 32 | |||
| #define PR_BITS_PER_INT64 64 | |||
| #define PR_BITS_PER_LONG 32 | |||
| #define PR_BITS_PER_FLOAT 32 | |||
| #define PR_BITS_PER_WORD 32 | |||
| #define PR_BITS_PER_DWORD 64 | |||
| #define PR_BITS_PER_DOUBLE 64 | |||
| #define PR_BITS_PER_BYTE_LOG2 3 | |||
| #define PR_BITS_PER_SHORT_LOG2 4 | |||
| #define PR_BITS_PER_INT_LOG2 5 | |||
| #define PR_BITS_PER_INT64_LOG2 6 | |||
| #define PR_BITS_PER_LONG_LOG2 5 | |||
| #define PR_BITS_PER_FLOAT_LOG2 5 | |||
| #define PR_BITS_PER_WORD_LOG2 5 | |||
| #define PR_BITS_PER_DWORD_LOG2 6 | |||
| #define PR_BITS_PER_DOUBLE_LOG2 6 | |||
| #define PR_ALIGN_OF_SHORT 2 | |||
| #define PR_ALIGN_OF_INT 4 | |||
| #define PR_ALIGN_OF_LONG 4 | |||
| #define PR_ALIGN_OF_INT64 8 | |||
| #define PR_ALIGN_OF_FLOAT 4 | |||
| #define PR_ALIGN_OF_WORD 4 | |||
| #define PR_ALIGN_OF_DWORD 8 | |||
| #define PR_ALIGN_OF_DOUBLE 4 | |||
| #define PR_ALIGN_OF_POINTER 4 | |||
| #define PR_BYTES_PER_WORD_LOG2 2 | |||
| #define PR_BYTES_PER_DWORD_LOG2 2 | |||
| #elif defined(_ALPHA_) | |||
| #define IS_LITTLE_ENDIAN 1 | |||
| #undef IS_BIG_ENDIAN | |||
| #define PR_BYTES_PER_BYTE 1 | |||
| #define PR_BYTES_PER_SHORT 2 | |||
| #define PR_BYTES_PER_INT 4 | |||
| #define PR_BYTES_PER_INT64 8 | |||
| #define PR_BYTES_PER_LONG 4 | |||
| #define PR_BYTES_PER_FLOAT 4 | |||
| #define PR_BYTES_PER_DOUBLE 8 | |||
| #define PR_BYTES_PER_WORD 4 | |||
| #define PR_BYTES_PER_DWORD 8 | |||
| #define PR_BITS_PER_BYTE 8 | |||
| #define PR_BITS_PER_SHORT 16 | |||
| #define PR_BITS_PER_INT 32 | |||
| #define PR_BITS_PER_INT64 64 | |||
| #define PR_BITS_PER_LONG 32 | |||
| #define PR_BITS_PER_FLOAT 32 | |||
| #define PR_BITS_PER_DOUBLE 64 | |||
| #define PR_BITS_PER_WORD 32 | |||
| #define PR_BITS_PER_BYTE_LOG2 3 | |||
| #define PR_BITS_PER_SHORT_LOG2 4 | |||
| #define PR_BITS_PER_INT_LOG2 5 | |||
| #define PR_BITS_PER_INT64_LOG2 6 | |||
| #define PR_BITS_PER_LONG_LOG2 5 | |||
| #define PR_BITS_PER_FLOAT_LOG2 5 | |||
| #define PR_BITS_PER_DOUBLE_LOG2 6 | |||
| #define PR_BITS_PER_WORD_LOG2 5 | |||
| #define PR_BYTES_PER_WORD_LOG2 2 | |||
| #define PR_BYTES_PER_DWORD_LOG2 3 | |||
| #define PR_ALIGN_OF_SHORT 2 | |||
| #define PR_ALIGN_OF_INT 4 | |||
| #define PR_ALIGN_OF_LONG 4 | |||
| #define PR_ALIGN_OF_INT64 8 | |||
| #define PR_ALIGN_OF_FLOAT 4 | |||
| #define PR_ALIGN_OF_DOUBLE 8 | |||
| #define PR_ALIGN_OF_POINTER 4 | |||
| #elif defined(_AMD64_) | |||
| #define IS_LITTLE_ENDIAN 1 | |||
| #undef IS_BIG_ENDIAN | |||
| #define IS_64 | |||
| #define PR_BYTES_PER_BYTE 1 | |||
| #define PR_BYTES_PER_SHORT 2 | |||
| #define PR_BYTES_PER_INT 4 | |||
| #define PR_BYTES_PER_INT64 8 | |||
| #define PR_BYTES_PER_LONG 4 | |||
| #define PR_BYTES_PER_FLOAT 4 | |||
| #define PR_BYTES_PER_WORD 8 | |||
| #define PR_BYTES_PER_DWORD 8 | |||
| #define PR_BYTES_PER_DOUBLE 8 | |||
| #define PR_BITS_PER_BYTE 8 | |||
| #define PR_BITS_PER_SHORT 16 | |||
| #define PR_BITS_PER_INT 32 | |||
| #define PR_BITS_PER_INT64 64 | |||
| #define PR_BITS_PER_LONG 32 | |||
| #define PR_BITS_PER_FLOAT 32 | |||
| #define PR_BITS_PER_WORD 64 | |||
| #define PR_BITS_PER_DWORD 64 | |||
| #define PR_BITS_PER_DOUBLE 64 | |||
| #define PR_BITS_PER_BYTE_LOG2 3 | |||
| #define PR_BITS_PER_SHORT_LOG2 4 | |||
| #define PR_BITS_PER_INT_LOG2 5 | |||
| #define PR_BITS_PER_INT64_LOG2 6 | |||
| #define PR_BITS_PER_LONG_LOG2 5 | |||
| #define PR_BITS_PER_FLOAT_LOG2 5 | |||
| #define PR_BITS_PER_WORD_LOG2 6 | |||
| #define PR_BITS_PER_DWORD_LOG2 6 | |||
| #define PR_BITS_PER_DOUBLE_LOG2 6 | |||
| #define PR_ALIGN_OF_SHORT 2 | |||
| #define PR_ALIGN_OF_INT 4 | |||
| #define PR_ALIGN_OF_LONG 4 | |||
| #define PR_ALIGN_OF_INT64 8 | |||
| #define PR_ALIGN_OF_FLOAT 4 | |||
| #define PR_ALIGN_OF_WORD 8 | |||
| #define PR_ALIGN_OF_DWORD 8 | |||
| #define PR_ALIGN_OF_DOUBLE 8 | |||
| #define PR_ALIGN_OF_POINTER 8 | |||
| #define PR_BYTES_PER_WORD_LOG2 3 | |||
| #define PR_BYTES_PER_DWORD_LOG2 3 | |||
| #elif defined(_IA64_) | |||
| #define IS_LITTLE_ENDIAN 1 | |||
| #undef IS_BIG_ENDIAN | |||
| #define IS_64 | |||
| #define PR_BYTES_PER_BYTE 1 | |||
| #define PR_BYTES_PER_SHORT 2 | |||
| #define PR_BYTES_PER_INT 4 | |||
| #define PR_BYTES_PER_INT64 8 | |||
| #define PR_BYTES_PER_LONG 4 | |||
| #define PR_BYTES_PER_FLOAT 4 | |||
| #define PR_BYTES_PER_WORD 8 | |||
| #define PR_BYTES_PER_DWORD 8 | |||
| #define PR_BYTES_PER_DOUBLE 8 | |||
| #define PR_BITS_PER_BYTE 8 | |||
| #define PR_BITS_PER_SHORT 16 | |||
| #define PR_BITS_PER_INT 32 | |||
| #define PR_BITS_PER_INT64 64 | |||
| #define PR_BITS_PER_LONG 32 | |||
| #define PR_BITS_PER_FLOAT 32 | |||
| #define PR_BITS_PER_WORD 64 | |||
| #define PR_BITS_PER_DWORD 64 | |||
| #define PR_BITS_PER_DOUBLE 64 | |||
| #define PR_BITS_PER_BYTE_LOG2 3 | |||
| #define PR_BITS_PER_SHORT_LOG2 4 | |||
| #define PR_BITS_PER_INT_LOG2 5 | |||
| #define PR_BITS_PER_INT64_LOG2 6 | |||
| #define PR_BITS_PER_LONG_LOG2 5 | |||
| #define PR_BITS_PER_FLOAT_LOG2 5 | |||
| #define PR_BITS_PER_WORD_LOG2 6 | |||
| #define PR_BITS_PER_DWORD_LOG2 6 | |||
| #define PR_BITS_PER_DOUBLE_LOG2 6 | |||
| #define PR_ALIGN_OF_SHORT 2 | |||
| #define PR_ALIGN_OF_INT 4 | |||
| #define PR_ALIGN_OF_LONG 4 | |||
| #define PR_ALIGN_OF_INT64 8 | |||
| #define PR_ALIGN_OF_FLOAT 4 | |||
| #define PR_ALIGN_OF_WORD 8 | |||
| #define PR_ALIGN_OF_DWORD 8 | |||
| #define PR_ALIGN_OF_DOUBLE 8 | |||
| #define PR_ALIGN_OF_POINTER 8 | |||
| #define PR_BYTES_PER_WORD_LOG2 3 | |||
| #define PR_BYTES_PER_DWORD_LOG2 3 | |||
| #else /* defined(_M_IX86) || defined(_X86_) */ | |||
| #error unknown processor architecture | |||
| #endif /* defined(_M_IX86) || defined(_X86_) */ | |||
| #ifndef HAVE_LONG_LONG | |||
| #define HAVE_LONG_LONG | |||
| #endif | |||
| #ifndef NO_NSPR_10_SUPPORT | |||
| #define BYTES_PER_BYTE PR_BYTES_PER_BYTE | |||
| #define BYTES_PER_SHORT PR_BYTES_PER_SHORT | |||
| #define BYTES_PER_INT PR_BYTES_PER_INT | |||
| #define BYTES_PER_INT64 PR_BYTES_PER_INT64 | |||
| #define BYTES_PER_LONG PR_BYTES_PER_LONG | |||
| #define BYTES_PER_FLOAT PR_BYTES_PER_FLOAT | |||
| #define BYTES_PER_DOUBLE PR_BYTES_PER_DOUBLE | |||
| #define BYTES_PER_WORD PR_BYTES_PER_WORD | |||
| #define BYTES_PER_DWORD PR_BYTES_PER_DWORD | |||
| #define BITS_PER_BYTE PR_BITS_PER_BYTE | |||
| #define BITS_PER_SHORT PR_BITS_PER_SHORT | |||
| #define BITS_PER_INT PR_BITS_PER_INT | |||
| #define BITS_PER_INT64 PR_BITS_PER_INT64 | |||
| #define BITS_PER_LONG PR_BITS_PER_LONG | |||
| #define BITS_PER_FLOAT PR_BITS_PER_FLOAT | |||
| #define BITS_PER_DOUBLE PR_BITS_PER_DOUBLE | |||
| #define BITS_PER_WORD PR_BITS_PER_WORD | |||
| #define BITS_PER_BYTE_LOG2 PR_BITS_PER_BYTE_LOG2 | |||
| #define BITS_PER_SHORT_LOG2 PR_BITS_PER_SHORT_LOG2 | |||
| #define BITS_PER_INT_LOG2 PR_BITS_PER_INT_LOG2 | |||
| #define BITS_PER_INT64_LOG2 PR_BITS_PER_INT64_LOG2 | |||
| #define BITS_PER_LONG_LOG2 PR_BITS_PER_LONG_LOG2 | |||
| #define BITS_PER_FLOAT_LOG2 PR_BITS_PER_FLOAT_LOG2 | |||
| #define BITS_PER_DOUBLE_LOG2 PR_BITS_PER_DOUBLE_LOG2 | |||
| #define BITS_PER_WORD_LOG2 PR_BITS_PER_WORD_LOG2 | |||
| #define ALIGN_OF_SHORT PR_ALIGN_OF_SHORT | |||
| #define ALIGN_OF_INT PR_ALIGN_OF_INT | |||
| #define ALIGN_OF_LONG PR_ALIGN_OF_LONG | |||
| #define ALIGN_OF_INT64 PR_ALIGN_OF_INT64 | |||
| #define ALIGN_OF_FLOAT PR_ALIGN_OF_FLOAT | |||
| #define ALIGN_OF_DOUBLE PR_ALIGN_OF_DOUBLE | |||
| #define ALIGN_OF_POINTER PR_ALIGN_OF_POINTER | |||
| #define ALIGN_OF_WORD PR_ALIGN_OF_WORD | |||
| #define BYTES_PER_WORD_LOG2 PR_BYTES_PER_WORD_LOG2 | |||
| #define BYTES_PER_DWORD_LOG2 PR_BYTES_PER_DWORD_LOG2 | |||
| #define WORDS_PER_DWORD_LOG2 PR_WORDS_PER_DWORD_LOG2 | |||
| #endif /* NO_NSPR_10_SUPPORT */ | |||
| #endif /* nspr_cpucfg___ */ | |||
| @@ -0,0 +1,569 @@ | |||
| /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | |||
| /* ***** BEGIN LICENSE BLOCK ***** | |||
| * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |||
| * | |||
| * The contents of this file are subject to the Mozilla Public License Version | |||
| * 1.1 (the "License"); you may not use this file except in compliance with | |||
| * the License. You may obtain a copy of the License at | |||
| * http://www.mozilla.org/MPL/ | |||
| * | |||
| * Software distributed under the License is distributed on an "AS IS" basis, | |||
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |||
| * for the specific language governing rights and limitations under the | |||
| * License. | |||
| * | |||
| * The Original Code is the Netscape Portable Runtime (NSPR). | |||
| * | |||
| * The Initial Developer of the Original Code is | |||
| * Netscape Communications Corporation. | |||
| * Portions created by the Initial Developer are Copyright (C) 1998-2000 | |||
| * the Initial Developer. All Rights Reserved. | |||
| * | |||
| * Contributor(s): | |||
| * | |||
| * Alternatively, the contents of this file may be used under the terms of | |||
| * either the GNU General Public License Version 2 or later (the "GPL"), or | |||
| * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | |||
| * in which case the provisions of the GPL or the LGPL are applicable instead | |||
| * of those above. If you wish to allow use of your version of this file only | |||
| * under the terms of either the GPL or the LGPL, and not to allow others to | |||
| * use your version of this file under the terms of the MPL, indicate your | |||
| * decision by deleting the provisions above and replace them with the notice | |||
| * and other provisions required by the GPL or the LGPL. If you do not delete | |||
| * the provisions above, a recipient may use your version of this file under | |||
| * the terms of any one of the MPL, the GPL or the LGPL. | |||
| * | |||
| * ***** END LICENSE BLOCK ***** */ | |||
| /* | |||
| ** File: prtypes.h | |||
| ** Description: Definitions of NSPR's basic types | |||
| ** | |||
| ** Prototypes and macros used to make up for deficiencies that we have found | |||
| ** in ANSI environments. | |||
| ** | |||
| ** Since we do not wrap <stdlib.h> and all the other standard headers, authors | |||
| ** of portable code will not know in general that they need these definitions. | |||
| ** Instead of requiring these authors to find the dependent uses in their code | |||
| ** and take the following steps only in those C files, we take steps once here | |||
| ** for all C files. | |||
| **/ | |||
| #ifndef prtypes_h___ | |||
| #define prtypes_h___ | |||
| #ifdef MDCPUCFG | |||
| #include MDCPUCFG | |||
| #else | |||
| #include "prcpucfg.h" | |||
| #endif | |||
| #include <stddef.h> | |||
| /*********************************************************************** | |||
| ** MACROS: PR_EXTERN | |||
| ** PR_IMPLEMENT | |||
| ** DESCRIPTION: | |||
| ** These are only for externally visible routines and globals. For | |||
| ** internal routines, just use "extern" for type checking and that | |||
| ** will not export internal cross-file or forward-declared symbols. | |||
| ** Define a macro for declaring procedures return types. We use this to | |||
| ** deal with windoze specific type hackery for DLL definitions. Use | |||
| ** PR_EXTERN when the prototype for the method is declared. Use | |||
| ** PR_IMPLEMENT for the implementation of the method. | |||
| ** | |||
| ** Example: | |||
| ** in dowhim.h | |||
| ** PR_EXTERN( void ) DoWhatIMean( void ); | |||
| ** in dowhim.c | |||
| ** PR_IMPLEMENT( void ) DoWhatIMean( void ) { return; } | |||
| ** | |||
| ** | |||
| ***********************************************************************/ | |||
| #if defined(WIN32) | |||
| #define PR_EXPORT(__type) extern __declspec(dllexport) __type | |||
| #define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type | |||
| #define PR_IMPORT(__type) __declspec(dllimport) __type | |||
| #define PR_IMPORT_DATA(__type) __declspec(dllimport) __type | |||
| #define PR_EXTERN(__type) extern __declspec(dllexport) __type | |||
| #define PR_IMPLEMENT(__type) __declspec(dllexport) __type | |||
| #define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type | |||
| #define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type | |||
| #define PR_CALLBACK | |||
| #define PR_CALLBACK_DECL | |||
| #define PR_STATIC_CALLBACK(__x) static __x | |||
| #elif defined(XP_BEOS) | |||
| #define PR_EXPORT(__type) extern __declspec(dllexport) __type | |||
| #define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type | |||
| #define PR_IMPORT(__type) extern __declspec(dllexport) __type | |||
| #define PR_IMPORT_DATA(__type) extern __declspec(dllexport) __type | |||
| #define PR_EXTERN(__type) extern __declspec(dllexport) __type | |||
| #define PR_IMPLEMENT(__type) __declspec(dllexport) __type | |||
| #define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type | |||
| #define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type | |||
| #define PR_CALLBACK | |||
| #define PR_CALLBACK_DECL | |||
| #define PR_STATIC_CALLBACK(__x) static __x | |||
| #elif defined(WIN16) | |||
| #define PR_CALLBACK_DECL __cdecl | |||
| #if defined(_WINDLL) | |||
| #define PR_EXPORT(__type) extern __type _cdecl _export _loadds | |||
| #define PR_IMPORT(__type) extern __type _cdecl _export _loadds | |||
| #define PR_EXPORT_DATA(__type) extern __type _export | |||
| #define PR_IMPORT_DATA(__type) extern __type _export | |||
| #define PR_EXTERN(__type) extern __type _cdecl _export _loadds | |||
| #define PR_IMPLEMENT(__type) __type _cdecl _export _loadds | |||
| #define PR_EXTERN_DATA(__type) extern __type _export | |||
| #define PR_IMPLEMENT_DATA(__type) __type _export | |||
| #define PR_CALLBACK __cdecl __loadds | |||
| #define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK | |||
| #else /* this must be .EXE */ | |||
| #define PR_EXPORT(__type) extern __type _cdecl _export | |||
| #define PR_IMPORT(__type) extern __type _cdecl _export | |||
| #define PR_EXPORT_DATA(__type) extern __type _export | |||
| #define PR_IMPORT_DATA(__type) extern __type _export | |||
| #define PR_EXTERN(__type) extern __type _cdecl _export | |||
| #define PR_IMPLEMENT(__type) __type _cdecl _export | |||
| #define PR_EXTERN_DATA(__type) extern __type _export | |||
| #define PR_IMPLEMENT_DATA(__type) __type _export | |||
| #define PR_CALLBACK __cdecl __loadds | |||
| #define PR_STATIC_CALLBACK(__x) __x PR_CALLBACK | |||
| #endif /* _WINDLL */ | |||
| #elif defined(XP_MAC) | |||
| #define PR_EXPORT(__type) extern __declspec(export) __type | |||
| #define PR_EXPORT_DATA(__type) extern __declspec(export) __type | |||
| #define PR_IMPORT(__type) extern __declspec(export) __type | |||
| #define PR_IMPORT_DATA(__type) extern __declspec(export) __type | |||
| #define PR_EXTERN(__type) extern __declspec(export) __type | |||
| #define PR_IMPLEMENT(__type) __declspec(export) __type | |||
| #define PR_EXTERN_DATA(__type) extern __declspec(export) __type | |||
| #define PR_IMPLEMENT_DATA(__type) __declspec(export) __type | |||
| #define PR_CALLBACK | |||
| #define PR_CALLBACK_DECL | |||
| #define PR_STATIC_CALLBACK(__x) static __x | |||
| #elif defined(XP_OS2) && defined(__declspec) | |||
| #define PR_EXPORT(__type) extern __declspec(dllexport) __type | |||
| #define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type | |||
| #define PR_IMPORT(__type) extern __declspec(dllimport) __type | |||
| #define PR_IMPORT_DATA(__type) extern __declspec(dllimport) __type | |||
| #define PR_EXTERN(__type) extern __declspec(dllexport) __type | |||
| #define PR_IMPLEMENT(__type) __declspec(dllexport) __type | |||
| #define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type | |||
| #define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type | |||
| #define PR_CALLBACK | |||
| #define PR_CALLBACK_DECL | |||
| #define PR_STATIC_CALLBACK(__x) static __x | |||
| #elif defined(XP_OS2_VACPP) | |||
| #define PR_EXPORT(__type) extern __type | |||
| #define PR_EXPORT_DATA(__type) extern __type | |||
| #define PR_IMPORT(__type) extern __type | |||
| #define PR_IMPORT_DATA(__type) extern __type | |||
| #define PR_EXTERN(__type) extern __type | |||
| #define PR_IMPLEMENT(__type) __type | |||
| #define PR_EXTERN_DATA(__type) extern __type | |||
| #define PR_IMPLEMENT_DATA(__type) __type | |||
| #define PR_CALLBACK _Optlink | |||
| #define PR_CALLBACK_DECL | |||
| #define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK | |||
| #else /* Unix */ | |||
| /* GCC 3.3 and later support the visibility attribute. */ | |||
| #if (__GNUC__ >= 4) || \ | |||
| (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) | |||
| #define PR_VISIBILITY_DEFAULT __attribute__((visibility("default"))) | |||
| #else | |||
| #define PR_VISIBILITY_DEFAULT | |||
| #endif | |||
| #define PR_EXPORT(__type) extern PR_VISIBILITY_DEFAULT __type | |||
| #define PR_EXPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type | |||
| #define PR_IMPORT(__type) extern PR_VISIBILITY_DEFAULT __type | |||
| #define PR_IMPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type | |||
| #define PR_EXTERN(__type) extern PR_VISIBILITY_DEFAULT __type | |||
| #define PR_IMPLEMENT(__type) PR_VISIBILITY_DEFAULT __type | |||
| #define PR_EXTERN_DATA(__type) extern PR_VISIBILITY_DEFAULT __type | |||
| #define PR_IMPLEMENT_DATA(__type) PR_VISIBILITY_DEFAULT __type | |||
| #define PR_CALLBACK | |||
| #define PR_CALLBACK_DECL | |||
| #define PR_STATIC_CALLBACK(__x) static __x | |||
| #endif | |||
| #if defined(_NSPR_BUILD_) | |||
| #define NSPR_API(__type) PR_EXPORT(__type) | |||
| #define NSPR_DATA_API(__type) PR_EXPORT_DATA(__type) | |||
| #else | |||
| #define NSPR_API(__type) PR_IMPORT(__type) | |||
| #define NSPR_DATA_API(__type) PR_IMPORT_DATA(__type) | |||
| #endif | |||
| /*********************************************************************** | |||
| ** MACROS: PR_BEGIN_MACRO | |||
| ** PR_END_MACRO | |||
| ** DESCRIPTION: | |||
| ** Macro body brackets so that macros with compound statement definitions | |||
| ** behave syntactically more like functions when called. | |||
| ***********************************************************************/ | |||
| #define PR_BEGIN_MACRO do { | |||
| #define PR_END_MACRO } while (0) | |||
| /*********************************************************************** | |||
| ** MACROS: PR_BEGIN_EXTERN_C | |||
| ** PR_END_EXTERN_C | |||
| ** DESCRIPTION: | |||
| ** Macro shorthands for conditional C++ extern block delimiters. | |||
| ***********************************************************************/ | |||
| #ifdef __cplusplus | |||
| #define PR_BEGIN_EXTERN_C extern "C" { | |||
| #define PR_END_EXTERN_C } | |||
| #else | |||
| #define PR_BEGIN_EXTERN_C | |||
| #define PR_END_EXTERN_C | |||
| #endif | |||
| /*********************************************************************** | |||
| ** MACROS: PR_BIT | |||
| ** PR_BITMASK | |||
| ** DESCRIPTION: | |||
| ** Bit masking macros. XXX n must be <= 31 to be portable | |||
| ***********************************************************************/ | |||
| #define PR_BIT(n) ((PRUint32)1 << (n)) | |||
| #define PR_BITMASK(n) (PR_BIT(n) - 1) | |||
| /*********************************************************************** | |||
| ** MACROS: PR_ROUNDUP | |||
| ** PR_MIN | |||
| ** PR_MAX | |||
| ** PR_ABS | |||
| ** DESCRIPTION: | |||
| ** Commonly used macros for operations on compatible types. | |||
| ***********************************************************************/ | |||
| #define PR_ROUNDUP(x,y) ((((x)+((y)-1))/(y))*(y)) | |||
| #define PR_MIN(x,y) ((x)<(y)?(x):(y)) | |||
| #define PR_MAX(x,y) ((x)>(y)?(x):(y)) | |||
| #define PR_ABS(x) ((x)<0?-(x):(x)) | |||
| PR_BEGIN_EXTERN_C | |||
| /************************************************************************ | |||
| ** TYPES: PRUint8 | |||
| ** PRInt8 | |||
| ** DESCRIPTION: | |||
| ** The int8 types are known to be 8 bits each. There is no type that | |||
| ** is equivalent to a plain "char". | |||
| ************************************************************************/ | |||
| #if PR_BYTES_PER_BYTE == 1 | |||
| typedef unsigned char PRUint8; | |||
| /* | |||
| ** Some cfront-based C++ compilers do not like 'signed char' and | |||
| ** issue the warning message: | |||
| ** warning: "signed" not implemented (ignored) | |||
| ** For these compilers, we have to define PRInt8 as plain 'char'. | |||
| ** Make sure that plain 'char' is indeed signed under these compilers. | |||
| */ | |||
| #if (defined(HPUX) && defined(__cplusplus) \ | |||
| && !defined(__GNUC__) && __cplusplus < 199707L) \ | |||
| || (defined(SCO) && defined(__cplusplus) \ | |||
| && !defined(__GNUC__) && __cplusplus == 1L) | |||
| typedef char PRInt8; | |||
| #else | |||
| typedef signed char PRInt8; | |||
| #endif | |||
| #else | |||
| #error No suitable type for PRInt8/PRUint8 | |||
| #endif | |||
| /************************************************************************ | |||
| * MACROS: PR_INT8_MAX | |||
| * PR_INT8_MIN | |||
| * PR_UINT8_MAX | |||
| * DESCRIPTION: | |||
| * The maximum and minimum values of a PRInt8 or PRUint8. | |||
| ************************************************************************/ | |||
| #define PR_INT8_MAX 127 | |||
| #define PR_INT8_MIN (-128) | |||
| #define PR_UINT8_MAX 255U | |||
| /************************************************************************ | |||
| ** TYPES: PRUint16 | |||
| ** PRInt16 | |||
| ** DESCRIPTION: | |||
| ** The int16 types are known to be 16 bits each. | |||
| ************************************************************************/ | |||
| #if PR_BYTES_PER_SHORT == 2 | |||
| typedef unsigned short PRUint16; | |||
| typedef short PRInt16; | |||
| #else | |||
| #error No suitable type for PRInt16/PRUint16 | |||
| #endif | |||
| /************************************************************************ | |||
| * MACROS: PR_INT16_MAX | |||
| * PR_INT16_MIN | |||
| * PR_UINT16_MAX | |||
| * DESCRIPTION: | |||
| * The maximum and minimum values of a PRInt16 or PRUint16. | |||
| ************************************************************************/ | |||
| #define PR_INT16_MAX 32767 | |||
| #define PR_INT16_MIN (-32768) | |||
| #define PR_UINT16_MAX 65535U | |||
| /************************************************************************ | |||
| ** TYPES: PRUint32 | |||
| ** PRInt32 | |||
| ** DESCRIPTION: | |||
| ** The int32 types are known to be 32 bits each. | |||
| ************************************************************************/ | |||
| #if PR_BYTES_PER_INT == 4 | |||
| typedef unsigned int PRUint32; | |||
| typedef int PRInt32; | |||
| #define PR_INT32(x) x | |||
| #define PR_UINT32(x) x ## U | |||
| #elif PR_BYTES_PER_LONG == 4 | |||
| typedef unsigned long PRUint32; | |||
| typedef long PRInt32; | |||
| #define PR_INT32(x) x ## L | |||
| #define PR_UINT32(x) x ## UL | |||
| #else | |||
| #error No suitable type for PRInt32/PRUint32 | |||
| #endif | |||
| /************************************************************************ | |||
| * MACROS: PR_INT32_MAX | |||
| * PR_INT32_MIN | |||
| * PR_UINT32_MAX | |||
| * DESCRIPTION: | |||
| * The maximum and minimum values of a PRInt32 or PRUint32. | |||
| ************************************************************************/ | |||
| #define PR_INT32_MAX PR_INT32(2147483647) | |||
| #define PR_INT32_MIN (-PR_INT32_MAX - 1) | |||
| #define PR_UINT32_MAX PR_UINT32(4294967295) | |||
| /************************************************************************ | |||
| ** TYPES: PRUint64 | |||
| ** PRInt64 | |||
| ** DESCRIPTION: | |||
| ** The int64 types are known to be 64 bits each. Care must be used when | |||
| ** declaring variables of type PRUint64 or PRInt64. Different hardware | |||
| ** architectures and even different compilers have varying support for | |||
| ** 64 bit values. The only guaranteed portability requires the use of | |||
| ** the LL_ macros (see prlong.h). | |||
| ************************************************************************/ | |||
| #ifdef HAVE_LONG_LONG | |||
| #if PR_BYTES_PER_LONG == 8 | |||
| typedef long PRInt64; | |||
| typedef unsigned long PRUint64; | |||
| #elif defined(WIN16) | |||
| typedef __int64 PRInt64; | |||
| typedef unsigned __int64 PRUint64; | |||
| #elif defined(WIN32) && !defined(__GNUC__) | |||
| typedef __int64 PRInt64; | |||
| typedef unsigned __int64 PRUint64; | |||
| #else | |||
| typedef long long PRInt64; | |||
| typedef unsigned long long PRUint64; | |||
| #endif /* PR_BYTES_PER_LONG == 8 */ | |||
| #else /* !HAVE_LONG_LONG */ | |||
| typedef struct { | |||
| #ifdef IS_LITTLE_ENDIAN | |||
| PRUint32 lo, hi; | |||
| #else | |||
| PRUint32 hi, lo; | |||
| #endif | |||
| } PRInt64; | |||
| typedef PRInt64 PRUint64; | |||
| #endif /* !HAVE_LONG_LONG */ | |||
| /************************************************************************ | |||
| ** TYPES: PRUintn | |||
| ** PRIntn | |||
| ** DESCRIPTION: | |||
| ** The PRIntn types are most appropriate for automatic variables. They are | |||
| ** guaranteed to be at least 16 bits, though various architectures may | |||
| ** define them to be wider (e.g., 32 or even 64 bits). These types are | |||
| ** never valid for fields of a structure. | |||
| ************************************************************************/ | |||
| #if PR_BYTES_PER_INT >= 2 | |||
| typedef int PRIntn; | |||
| typedef unsigned int PRUintn; | |||
| #else | |||
| #error 'sizeof(int)' not sufficient for platform use | |||
| #endif | |||
| /************************************************************************ | |||
| ** TYPES: PRFloat64 | |||
| ** DESCRIPTION: | |||
| ** NSPR's floating point type is always 64 bits. | |||
| ************************************************************************/ | |||
| typedef double PRFloat64; | |||
| /************************************************************************ | |||
| ** TYPES: PRSize | |||
| ** DESCRIPTION: | |||
| ** A type for representing the size of objects. | |||
| ************************************************************************/ | |||
| typedef size_t PRSize; | |||
| /************************************************************************ | |||
| ** TYPES: PROffset32, PROffset64 | |||
| ** DESCRIPTION: | |||
| ** A type for representing byte offsets from some location. | |||
| ************************************************************************/ | |||
| typedef PRInt32 PROffset32; | |||
| typedef PRInt64 PROffset64; | |||
| /************************************************************************ | |||
| ** TYPES: PRPtrDiff | |||
| ** DESCRIPTION: | |||
| ** A type for pointer difference. Variables of this type are suitable | |||
| ** for storing a pointer or pointer subtraction. | |||
| ************************************************************************/ | |||
| typedef ptrdiff_t PRPtrdiff; | |||
| /************************************************************************ | |||
| ** TYPES: PRUptrdiff | |||
| ** DESCRIPTION: | |||
| ** A type for pointer difference. Variables of this type are suitable | |||
| ** for storing a pointer or pointer sutraction. | |||
| ************************************************************************/ | |||
| #ifdef _WIN64 | |||
| typedef unsigned __int64 PRUptrdiff; | |||
| #else | |||
| typedef unsigned long PRUptrdiff; | |||
| #endif | |||
| /************************************************************************ | |||
| ** TYPES: PRBool | |||
| ** DESCRIPTION: | |||
| ** Use PRBool for variables and parameter types. Use PR_FALSE and PR_TRUE | |||
| ** for clarity of target type in assignments and actual arguments. Use | |||
| ** 'if (bool)', 'while (!bool)', '(bool) ? x : y' etc., to test booleans | |||
| ** just as you would C int-valued conditions. | |||
| ************************************************************************/ | |||
| typedef PRIntn PRBool; | |||
| #define PR_TRUE 1 | |||
| #define PR_FALSE 0 | |||
| /************************************************************************ | |||
| ** TYPES: PRPackedBool | |||
| ** DESCRIPTION: | |||
| ** Use PRPackedBool within structs where bitfields are not desirable | |||
| ** but minimum and consistant overhead matters. | |||
| ************************************************************************/ | |||
| typedef PRUint8 PRPackedBool; | |||
| /* | |||
| ** Status code used by some routines that have a single point of failure or | |||
| ** special status return. | |||
| */ | |||
| typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus; | |||
| #ifndef __PRUNICHAR__ | |||
| #define __PRUNICHAR__ | |||
| #if defined(WIN32) || defined(XP_MAC) | |||
| typedef wchar_t PRUnichar; | |||
| #else | |||
| typedef PRUint16 PRUnichar; | |||
| #endif | |||
| #endif | |||
| /* | |||
| ** WARNING: The undocumented data types PRWord and PRUword are | |||
| ** only used in the garbage collection and arena code. Do not | |||
| ** use PRWord and PRUword in new code. | |||
| ** | |||
| ** A PRWord is an integer that is the same size as a void*. | |||
| ** It implements the notion of a "word" in the Java Virtual | |||
| ** Machine. (See Sec. 3.4 "Words", The Java Virtual Machine | |||
| ** Specification, Addison-Wesley, September 1996. | |||
| ** http://java.sun.com/docs/books/vmspec/index.html.) | |||
| */ | |||
| #ifdef _WIN64 | |||
| typedef __int64 PRWord; | |||
| typedef unsigned __int64 PRUword; | |||
| #else | |||
| typedef long PRWord; | |||
| typedef unsigned long PRUword; | |||
| #endif | |||
| #if defined(NO_NSPR_10_SUPPORT) | |||
| #else | |||
| /********* ???????????????? FIX ME ??????????????????????????? *****/ | |||
| /********************** Some old definitions until pr=>ds transition is done ***/ | |||
| /********************** Also, we are still using NSPR 1.0. GC ******************/ | |||
| /* | |||
| ** Fundamental NSPR macros, used nearly everywhere. | |||
| */ | |||
| #define PR_PUBLIC_API PR_IMPLEMENT | |||
| /* | |||
| ** Macro body brackets so that macros with compound statement definitions | |||
| ** behave syntactically more like functions when called. | |||
| */ | |||
| #define NSPR_BEGIN_MACRO do { | |||
| #define NSPR_END_MACRO } while (0) | |||
| /* | |||
| ** Macro shorthands for conditional C++ extern block delimiters. | |||
| */ | |||
| #ifdef NSPR_BEGIN_EXTERN_C | |||
| #undef NSPR_BEGIN_EXTERN_C | |||
| #endif | |||
| #ifdef NSPR_END_EXTERN_C | |||
| #undef NSPR_END_EXTERN_C | |||
| #endif | |||
| #ifdef __cplusplus | |||
| #define NSPR_BEGIN_EXTERN_C extern "C" { | |||
| #define NSPR_END_EXTERN_C } | |||
| #else | |||
| #define NSPR_BEGIN_EXTERN_C | |||
| #define NSPR_END_EXTERN_C | |||
| #endif | |||
| #ifdef XP_MAC | |||
| #include "protypes.h" | |||
| #else | |||
| #include "obsolete/protypes.h" | |||
| #endif | |||
| /********* ????????????? End Fix me ?????????????????????????????? *****/ | |||
| #endif /* NO_NSPR_10_SUPPORT */ | |||
| PR_END_EXTERN_C | |||
| #endif /* prtypes_h___ */ | |||