created mirror

This commit is contained in:
whatever
2026-09-14 20:19:29 -04:00
commit 6764738d92
600 changed files with 87187 additions and 0 deletions

53
Java/script/Makefile Normal file
View File

@@ -0,0 +1,53 @@
PERLDIR=../../C++/script/Perl
IBMCFLAGS=-Dint64_t="long long" -Dlinux -g -I/BIG/ibmjdk/include -I/BIG/ibmjdk/include/linux -I../../C++ -I../../C++/script/Perl
CFLAGS=-g -I$(PERLDIR)
IBMLDFLAGS=-L/BIG/ibmjdk/lib/linux/native_threads/
all: classes hdr jzigzag
jzigzag: invoke.o zzfoo.o ZZScriptPerl.o ZZScriptAPI_1_JNI.o
gcc -o jzigzag -export-dynamic invoke.o zzfoo.o ZZScriptPerl.o ZZScriptAPI_1_JNI.o $(IBMLDFLAGS) -ljava `perl -MExtUtils::Embed -e ldopts`
invoke.o: invoke.c
gcc $(IBMCFLAGS) -c invoke.c
zzfoo.o: $(PERLDIR)/zzfoo.cpp
g++ $(CFLAGS) `perl -MConfig -e 'print "$$Config{ccflags} -I$$Config{installarchlib}/CORE"'` -c -o zzfoo.o -I../../C++ $(PERLDIR)/zzfoo.cpp
ZZScriptPerl.o: ZZScriptPerl.cpp *.h
g++ $(IBMCFLAGS) -c -o ZZScriptPerl.o ZZScriptPerl.cpp
ZZScriptAPI_1_JNI.o: ZZScriptAPI_1_JNI.cpp *.h
g++ $(IBMCFLAGS) -c -o ZZScriptAPI_1_JNI.o ZZScriptAPI_1_JNI.cpp
# all: classes hdr libZZScriptPerl.la
classes:
javac -d .. *.java
hdr: fi_iki_lukka_ZZScriptPerl.h
fi_iki_lukka_ZZScriptPerl.h: ../fi/iki/lukka/ZZScriptPerl.class
javah -jni fi.iki.lukka.ZZScriptPerl
# libZZScriptPerl.la: ZZScriptPerl.lo zzfoo.lo
# libtool g++ $(CFLAGS) -o libZZScriptPerl.la ZZScriptPerl.lo zzfoo.lo `perl -MConfig -e 'print "-L$$Config{installarchlib}/CORE -lperl $$Config{libs}"'`
#
# # Doesn't work due to DynaLoader! ARGH!
# #`perl -MExtUtils::Embed -e ccopts -e ldopts`
#
# zzfoo.lo: $(PERLDIR)/zzfoo.cpp
# libtool g++ $(CFLAGS) `perl -MConfig -e 'print "$$Config{ccflags} -I$$Config{installarchlib}/CORE"'` -c -o zzfoo.lo -I../../C++ $(PERLDIR)/zzfoo.cpp
#
#
#
# $(PERLDIR)/zzfoo.cpp: ../../C++/script/Perl/zzfoo.xs
# (cd $(PERLDIR); make zzfoo.cpp)
#
#
# ZZScriptPerl.lo: ZZScriptPerl.cpp *.h
# libtool g++ $(IBMCFLAGS) -c -o ZZScriptPerl.lo ZZScriptPerl.cpp

12
Java/script/ZZId.h Normal file
View File

@@ -0,0 +1,12 @@
#ifndef ZZID_H
#define ZZID_H
// class _jobject;
// typedef _jobject* jobject;
// #define ZZId jobject
//
// Arghh...
#define ZZId long
#endif

View File

@@ -0,0 +1,31 @@
#include <jni.h>
#include "ZZId.h"
#include "ZZScriptAPI_1_JNI.h"
#include "zzfoo.h"
const ZZScriptAPI_1_0_JNI::meth ZZScriptAPI_1_0_JNI::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" },
}; */
/* = {
{ "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" },
}; */

View File

@@ -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

View File

@@ -0,0 +1,55 @@
#include <jni.h>
#include "ZZId.h"
#include "ZZScriptAPI_1_JNI.h"
#include "zzfoo.h"
static jclass zzspclass;
static jfieldID ptrid;
extern "C" {
JNIEXPORT void JNICALL Java_fi_iki_lukka_ZZScriptPerl_init
(JNIEnv *env, jobject foo)
{
if(!zzspclass)
zzspclass = (jclass)env->NewGlobalRef(env->GetObjectClass(foo));
ptrid = env->GetFieldID(zzspclass, "ptr", "J");
if(!ptrid) abort();
ZZScriptAPI_1_0_JNI *j = new ZZScriptAPI_1_0_JNI(env);
zzperl_init(j);
env->SetLongField(foo, ptrid, (jlong)j);
}
JNIEXPORT void JNICALL Java_fi_iki_lukka_ZZScriptPerl_call
(JNIEnv *env, jobject foo, jstring code0, jobject view0, jobject
cview0, jobject scr0, jobject cur0, jstring dimx0, jstring dimy0)
{
printf("ENTERING PERLCALL\n");
ZZScriptAPI_1_0_JNI *j = (ZZScriptAPI_1_0_JNI *) env->GetLongField(foo, ptrid);
if(!j) abort();
char *code = (char *)env->GetStringUTFChars(code0, 0);
char *dimx = (char *)env->GetStringUTFChars(dimx0, 0);
char *dimy = (char *)env->GetStringUTFChars(dimy0, 0);
zzperl_call(code, (long)view0, (long)cview0, (long)scr0, (long)cur0, dimx, dimy);
env->ReleaseStringUTFChars(code0,code);
env->ReleaseStringUTFChars(dimx0,dimx);
env->ReleaseStringUTFChars(dimy0,dimy);
printf("RETURNING FROM PERLCALL\n");
}
JNINativeMethod ms[2] = {
{ "init", "()V", Java_fi_iki_lukka_ZZScriptPerl_init },
{ "call", "(Ljava/lang/String;Lfi/iki/lukka/ZZCell;Lfi/iki/lukka/ZZCell;Lfi/iki/lukka/ZZCell;Lfi/iki/lukka/ZZCell;Ljava/lang/String;Ljava/lang/String;)V",
Java_fi_iki_lukka_ZZScriptPerl_call }
};
void zsp_install(JNIEnv *env) {
zzspclass = env->FindClass("fi/iki/lukka/ZZScriptPerl");
if(!zzspclass) abort();
zzspclass = (jclass)env->NewGlobalRef(zzspclass);
env->RegisterNatives(zzspclass, ms, 2);
}
}

View File

@@ -0,0 +1,9 @@
package org.gzigzag;
public class ZZScriptPerl {
long ptr;
public ZZScriptPerl() { init(); };
public native void init();
public native void call(String code, ZZCell view, ZZCell controlView,
ZZCell script, ZZCell cur, String dimX, String dimY);
}

76
Java/script/invoke.c Normal file
View File

@@ -0,0 +1,76 @@
// Copied from
// http://java.sun.com/docs/books/tutorial/native1.1/invoking/example-1dot1/invoke.c
#include <jni.h>
#ifdef _WIN32
#define PATH_SEPARATOR ';'
#else /* UNIX */
#define PATH_SEPARATOR ':'
#endif
// #define USER_CLASSPATH "." /* where Prog.class is */
extern void zsp_install(JNIEnv *env);
main() {
JNIEnv *env;
JavaVM *jvm;
JDK1_1InitArgs vm_args;
jint res;
jclass cls;
jmethodID mid;
jstring jstr;
jobjectArray args;
char classpath[1024];
/* IMPORTANT: specify vm_args version # if you use JDK1.1.2 and beyond */
vm_args.version = 0x00010001;
JNI_GetDefaultJavaVMInitArgs(&vm_args);
// Tjl
vm_args.classpath = getenv("CLASSPATH");
// /* Append USER_CLASSPATH to the end of default system class path */
// sprintf(classpath, "%s%c%s",
// vm_args.classpath, PATH_SEPARATOR, USER_CLASSPATH);
// vm_args.classpath = classpath;
/* Create the Java VM */
res = JNI_CreateJavaVM(&jvm,&env,&vm_args);
if (res < 0) {
fprintf(stderr, "Can't create Java VM\n");
exit(1);
}
zsp_install(env);
cls = (*env)->FindClass(env, "foo/Test1");
if (cls == 0) {
fprintf(stderr, "Can't find foo/Test1 class\n");
exit(1);
}
mid = (*env)->GetStaticMethodID(env, cls, "main", "([Ljava/lang/String;)V");
if (mid == 0) {
fprintf(stderr, "Can't find Prog.main\n");
exit(1);
}
jstr = (*env)->NewStringUTF(env, " from C!");
if (jstr == 0) {
fprintf(stderr, "Out of memory\n");
exit(1);
}
args = (*env)->NewObjectArray(env, 1,
(*env)->FindClass(env, "java/lang/String"), jstr);
if (args == 0) {
fprintf(stderr, "Out of memory\n");
exit(1);
}
(*env)->CallStaticVoidMethod(env, cls, mid, args);
(*jvm)->DestroyJavaVM(jvm);
}