-/******************************** jni.h ***************************************
+/* jni.h - JNI types and data structures
- contains Java Native Interface types and data structures
- includes layout of the JNI function table
-
-*******************************************************************************/
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+ R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser,
+ M. Probst, S. Ring, E. Steiner, C. Thalinger, D. Thuernbeck,
+ P. Tomsich, J. Wenninger
+
+ This file is part of CACAO.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ Contact: cacao@complang.tuwien.ac.at
+
+ Authors: ?
+
+ $Id: jni.h 747 2003-12-13 22:10:17Z twisti $
+
+*/
+
+
+#ifndef _JNI_H
+#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 */
+
+
+/*
+ * These are local overrides for various environment variables in Emacs.
+ * Please do not remove this and leave it at the end of the file, where
+ * Emacs will automagically detect them.
+ * ---------------------------------------------------------------------
+ * Local variables:
+ * mode: c
+ * indent-tabs-mode: t
+ * c-basic-offset: 4
+ * tab-width: 4
+ * End:
+ */