Authors: ?
- $Id: jni.h 557 2003-11-02 22:51:59Z twisti $
+ $Id: jni.h 747 2003-12-13 22:10:17Z twisti $
*/
#define _JNI_H
#include <stdarg.h>
+#include "global.h"
+#include "types.h"
+
+
+#define JNI_VERSION 0x00010002
#define JNIEXPORT
#define JNICALL
+
/* JNI datatypes */
#define jobject java_objectheader*
-#define jclass struct classinfo*
-#define jthrowable jobject
-#define jweak jobject
-#define jarray java_arrayheader*
-#define jlongArray java_longarray*
-#define jbooleanArray java_booleanarray*
-#define jintArray java_intarray*
-#define jcharArray java_chararray*
-#define jbyteArray java_bytearray*
-#define jshortArray java_shortarray*
-#define jdoubleArray java_doublearray*
-#define jfloatArray java_floatarray*
-#define jobjectArray java_objectarray*
-#define jstring jobject
-#define jint s4
-#define jchar s2
-#define jboolean u1
-#define jbyte s1
-#define jshort s2
-#define jlong s8
-#define jfloat float
-#define jdouble double
-#define jsize jint
-#define jfieldID fieldinfo*
-#define jmethodID methodinfo*
-
-struct _JavaVM; /* opaque structure */
+#define jclass struct classinfo*
+#define jthrowable jobject
+#define jweak jobject
+#define jarray java_arrayheader*
+#define jlongArray java_longarray*
+#define jbooleanArray java_booleanarray*
+#define jintArray java_intarray*
+#define jcharArray java_chararray*
+#define jbyteArray java_bytearray*
+#define jshortArray java_shortarray*
+#define jdoubleArray java_doublearray*
+#define jfloatArray java_floatarray*
+#define jobjectArray java_objectarray*
+#define jstring jobject
+#define jint s4
+#define jchar s2
+#define jboolean u1
+#define jbyte s1
+#define jshort s2
+#define jlong s8
+#define jfloat float
+#define jdouble double
+#define jsize jint
+#define jfieldID fieldinfo*
+#define jmethodID methodinfo*
+
+
typedef struct _JavaVM* JavaVM;
+struct _JavaVM{
+ void *(*reserved0) ();
+ void *(*reserved1) ();
+ void *(*reserved2) ();
+ jint (*DestroyJavaVM) (JavaVM *);
+ jint (*AttachCurrentThread) (JavaVM *, void **, void *);
+ jint (*DetachCurrentThread) (JavaVM *);
+ jint (*GetEnv) (JavaVM *, void **, jint);
+ jint (*AttachCurrentThreadAsDaemon) (JavaVM *, void **, void *);
+
+};
+
+
typedef union jvalue {
jboolean z;
jbyte b;
Java VM Interface
*/
-typedef struct JNI_Table JNIEnv;
+typedef struct JNI_Table *JNIEnv;
struct JNI_Table {
jint (*MonitorExit) (JNIEnv*, jobject obj);
/* JavaVM interface */
-
jint (*GetJavaVM) (JNIEnv*, JavaVM **vm);
void (*GetStringRegion) (JNIEnv*, jstring str, jsize start, jsize len, jchar *buf);
/* the active JNI function table */
extern JNIEnv env;
+extern JavaVM javaVM;
+extern struct JNI_Table envTable;
+
+
+/* function prototypes */
+
+jfieldID getFieldID_critical(JNIEnv *env, jclass clazz, char *name, char *sig);
+
+jobject GetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID);
+jboolean GetBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID);
+jbyte GetByteField(JNIEnv *env, jobject obj, jfieldID fieldID);
+jchar GetCharField(JNIEnv *env, jobject obj, jfieldID fieldID);
+jshort GetShortField(JNIEnv *env, jobject obj, jfieldID fieldID);
+jint GetIntField(JNIEnv *env, jobject obj, jfieldID fieldID);
+jlong GetLongField(JNIEnv *env, jobject obj, jfieldID fieldID);
+jfloat GetFloatField(JNIEnv *env, jobject obj, jfieldID fieldID);
+jdouble GetDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID);
+
+void SetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
+void SetBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
+void SetByteField(JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
+void SetCharField(JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
+void SetShortField(JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
+void SetIntField(JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
+void SetLongField(JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
+void SetFloatField(JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
+void SetDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
+
+
+#define setField(obj,typ,var,val) *((typ*) ((long int) obj + (long int) var->offset))=val;
+#define getField(obj,typ,var) *((typ*) ((long int) obj + (long int) var->offset))
+#define setfield_critical(clazz,obj,name,sig,jdatatype,val) setField(obj,jdatatype,getFieldID_critical(env,clazz,name,sig),val);
+
+jobject *jni_method_invokeNativeHelper(JNIEnv *env,struct methodinfo *mi,jobject obj, java_objectarray *params);
#endif /* _JNI_H */