#include #include #include "MYPerl.h" /* perlxsi.c ‚Å’è‹` */ EXTERN_C void xs_init (pTHX); /* * Class: MYPerl * Method: _start * Signature: ()V */ JNIEXPORT void JNICALL Java_MYPerl__1start (JNIEnv *jniEnv, jclass jcls) { int ac=1; char **av=NULL; char **ev=NULL; PERL_SYS_INIT3(&ac, &av, &ev); } /* * Class: MYPerl * Method: _stop * Signature: ()V */ JNIEXPORT void JNICALL Java_MYPerl__1stop (JNIEnv *jniEnv, jclass jcls) { PERL_SYS_TERM(); } /* * Class: MYPerl * Method: _initialize * Signature: (Ljava/lang/String;)I */ JNIEXPORT jint JNICALL Java_MYPerl__1initialize (JNIEnv *jniEnv, jobject jobj) { PerlInterpreter *my_perl; char *embedding[] = { "", "-e", "0" }; my_perl = perl_alloc(); perl_construct( my_perl ); perl_parse(my_perl, xs_init, 3, embedding, NULL); PL_exit_flags |= PERL_EXIT_DESTRUCT_END; perl_run(my_perl); return (jint)my_perl; } /* * Class: MYPerl * Method: _terminate * Signature: (I)V */ JNIEXPORT void JNICALL Java_MYPerl__1terminate (JNIEnv * jniEnv, jobject jobj, jint jintPi) { PerlInterpreter *my_perl = (PerlInterpreter *)jintPi; PERL_SET_CONTEXT(my_perl); perl_destruct(my_perl); perl_free(my_perl); } /* * Class: MYPerl * Method: _eval * Signature: (ILjava/lang/String;)I */ JNIEXPORT jint JNICALL Java_MYPerl__1eval (JNIEnv *jniEnv, jobject jobj, jint jintPi, jstring jstrX) { jint ret; PerlInterpreter *my_perl = (PerlInterpreter *)jintPi; const char *x = (*jniEnv)->GetStringUTFChars(jniEnv, jstrX, 0); PERL_SET_CONTEXT(my_perl); ret = (jint)eval_pv((char*)x, TRUE); (*jniEnv)->ReleaseStringUTFChars(jniEnv, jstrX, x); return ret; } /* * Class: MYPerl * Method: _getSvPV * Signature: (II)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_MYPerl__1getSvPV (JNIEnv *jniEnv, jobject jobj, jint jintPi, jint jintX) { char *svpv; jstring ret; PerlInterpreter *my_perl = (PerlInterpreter *)jintPi; SV *x = (SV*)jintX; STRLEN n_a; PERL_SET_CONTEXT(my_perl); svpv = SvPV(x, n_a); ret = (*jniEnv)->NewStringUTF(jniEnv, svpv); free(svpv); return ret; } /* * Class: MYPerl * Method: _load_module * Signature: (ILjava/lang/String;)Ljava/lang/String; */ JNIEXPORT void JNICALL Java_MYPerl__1load_1module (JNIEnv *jniEnv, jobject jobj, jint jintPi, jstring jstrModName) { PerlInterpreter *my_perl = (PerlInterpreter *)jintPi; const char *modName = (*jniEnv)->GetStringUTFChars(jniEnv, jstrModName, NULL); PERL_SET_CONTEXT(my_perl); load_module(PERL_LOADMOD_NOIMPORT, newSVpvn((char*)modName, strlen(modName)), newSVnv(0.0)); (*jniEnv)->ReleaseStringUTFChars(jniEnv, jstrModName, modName); }