Linking-almost-done save.
[cacao.git] / jni.h
diff --git a/jni.h b/jni.h
index 140c1737c90034bbe5d81b1fc63b146a0fa5235b..8981e4de0f97177485a865a86a00b02329a14beb 100644 (file)
--- a/jni.h
+++ b/jni.h
@@ -26,7 +26,7 @@
 
    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;
@@ -116,7 +135,7 @@ typedef struct {
        Java VM Interface 
 */
 
-typedef struct JNI_Table JNIEnv;
+typedef struct JNI_Table *JNIEnv;
 
 struct JNI_Table {
     
@@ -427,7 +446,6 @@ 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);
@@ -449,6 +467,40 @@ struct JNI_Table {
 /* 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 */