created mirror
This commit is contained in:
commit
6764738d92
600 files changed
+87187
No files matched your search
@@ -0,0 +1,131 @@
|
||||
#ifndef ZZSCRIPT_API_1_JNI_H
|
||||
#define ZZSCRIPT_API_1_JNI_H
|
||||
|
||||
#define EXC() if(env->ExceptionOccurred()) {env->ExceptionDescribe(); env->FatalError("EXCEPTION");}
|
||||
|
||||
// XXX ARGH
|
||||
// #define MID(cell,id) (env->GetMethodID(env->GetObjectClass((jobject)cell), names[id].name, names[id].sig) || (env->FatalError("NoMethod"),(jmethodID)0))
|
||||
#define MID(cell,id) (env->GetMethodID(env->GetObjectClass((jobject)cell), names[id].name, names[id].sig))
|
||||
|
||||
|
||||
#include "ZZScriptAPI_1.h"
|
||||
|
||||
class ZZScriptAPI_1_0_JNI : public ZZScriptAPI_1_0 {
|
||||
protected:
|
||||
JNIEnv *env;
|
||||
jclass zzcell;
|
||||
enum meths {
|
||||
GETNEIGH,
|
||||
HEADCELL,
|
||||
NEWCELL,
|
||||
DELETECELL,
|
||||
CONNECTCELLS,
|
||||
INSERTCELL,
|
||||
DISCONNECT,
|
||||
GETTEXT,
|
||||
SETTEXT,
|
||||
LASTMETH_
|
||||
};
|
||||
static const struct meth {char *name; char *sig;} names[LASTMETH_]
|
||||
= {
|
||||
{ "getNeighbour", "(Ljava/lang/String;I)Lfi/iki/lukka/ZZCell;" },
|
||||
{ "getHeadcell", "(Ljava/lang/String;I)Lfi/iki/lukka/ZZCell;" },
|
||||
{ "newCell", "(Ljava/lang/String;I)Lfi/iki/lukka/ZZCell;" },
|
||||
{ "delete", "()V" },
|
||||
{ "connect", "(Ljava/lang/String;Lfi/iki/lukka/ZZCell;)V" },
|
||||
{ "insert", "(Ljava/lang/String;ILfi/iki/lukka/ZZCell;)V" },
|
||||
{ "disconnect", "(Ljava/lang/String;I)V" },
|
||||
{ "getText", "()Ljava/lang/String;" },
|
||||
{ "setText", "(Ljava/lang/String;)V" },
|
||||
};
|
||||
jmethodID mids[LASTMETH_];
|
||||
public:
|
||||
ZZScriptAPI_1_0_JNI(JNIEnv *env0) {
|
||||
utfref = 0;
|
||||
strref = 0;
|
||||
env = env0;
|
||||
zzcell = env->FindClass("fi/iki/lukka/ZZCell");
|
||||
if(!zzcell) abort();
|
||||
zzcell = (jclass)env->NewGlobalRef(zzcell);
|
||||
if(!zzcell) abort();
|
||||
for(int i=0; i<LASTMETH_; i++) {
|
||||
mids[i] = env->GetMethodID(zzcell, names[i].name, names[i].sig);
|
||||
if(!mids[i]) {
|
||||
abort();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static const int verbose = 1;
|
||||
|
||||
virtual ZZId get_cell (ZZId from, const char *dim, int dir) {
|
||||
printf("CB GETCELL\n");
|
||||
long res = (long)env->CallObjectMethod((jobject)from, MID(from,GETNEIGH),
|
||||
env->NewStringUTF(dim), (jint)dir);
|
||||
EXC();
|
||||
return res;
|
||||
};
|
||||
virtual ZZId get_headcell (ZZId from, const char *dim, int dir)
|
||||
{
|
||||
printf("CB HEADCELL\n");
|
||||
EXC();
|
||||
abort();
|
||||
};
|
||||
virtual ZZId new_cell (ZZId from, const char *dim, int dir) {
|
||||
printf("CB NEWCELL\n");
|
||||
long res = (long)env->CallObjectMethod((jobject)from, MID(from,NEWCELL),
|
||||
env->NewStringUTF(dim), (jint)dir);
|
||||
EXC();
|
||||
return res;
|
||||
}
|
||||
virtual void delete_cell (ZZId cell) {
|
||||
printf("CB DELCELL\n");
|
||||
env->CallVoidMethod((jobject)cell, MID(cell,DELETECELL));
|
||||
EXC();
|
||||
};
|
||||
virtual void connect_cells (ZZId from, const char *dim, ZZId to) {
|
||||
printf("CB CONCELL\n");
|
||||
env->CallVoidMethod((jobject)from, MID(from,CONNECTCELLS),
|
||||
env->NewStringUTF(dim), (jobject)to);
|
||||
EXC();
|
||||
};
|
||||
virtual void insert_cell (ZZId where, const char *dim, int dir, ZZId what) {
|
||||
printf("CB INSCELL\n");
|
||||
env->CallVoidMethod((jobject)where, MID(where,INSERTCELL),
|
||||
env->NewStringUTF(dim), (jint)dir, (jobject)what);
|
||||
EXC();
|
||||
};
|
||||
virtual void disconnect (ZZId from, const char *dim, int dir) {
|
||||
printf("CB DISCELL\n");
|
||||
env->CallVoidMethod((jobject)from, MID(from,NEWCELL),
|
||||
env->NewStringUTF(dim), (jint)dir);
|
||||
EXC();
|
||||
};
|
||||
const char *utfref;
|
||||
jstring strref;
|
||||
virtual const char *get_text (ZZId cell) {
|
||||
printf("CB GETTEXT\n");
|
||||
if(utfref) {
|
||||
// XXX?
|
||||
env->ReleaseStringUTFChars(strref, utfref);
|
||||
}
|
||||
strref = (jstring)env->CallObjectMethod((jobject)cell, MID(cell,GETTEXT));
|
||||
utfref = env->GetStringUTFChars(strref,0);
|
||||
EXC();
|
||||
return utfref;
|
||||
};
|
||||
virtual void set_text (ZZId cell, const char *str) {
|
||||
printf("CB SETTEXT\n");
|
||||
env->CallVoidMethod((jobject)cell, MID(cell,SETTEXT),
|
||||
env->NewStringUTF(str));
|
||||
EXC();
|
||||
printf("CB SETTEXT ret\n");
|
||||
};
|
||||
virtual int popup_warning (const char *text) {
|
||||
abort();
|
||||
};
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in new issue
Block a user