diff --git a/Makefile.in b/Makefile.in
index 691d89c..085bbf7 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -136,6 +136,12 @@ $(BINDIR)/Debug/plugins/%@DLLEXT@: src/plugins/%/* $(BINDIR)/Debug/$(PACKAGE_TAR
$(BINDIR)/Release/plugins/%@DLLEXT@: src/plugins/%/* $(BINDIR)/Release/$(PACKAGE_TARNAME)$(EXEEXT)
@make $(PLUGIN_RELEASE_ARGS) -C $(dir $<) Release
+$(BINDIR)/Debug/plugins/j3270@DLLEXT@: src/java/* $(BINDIR)/Debug/$(PACKAGE_TARNAME)$(EXEEXT)
+ @make BINDIR="../../$(BINDIR)" PW3270_LIBS="-L../../$(BINDIR)/Debug@DLLDIR@ -l3270 -lpw3270" PW3270_CFLAGS="-I../include" -C $(dir $<) Debug
+
+$(BINDIR)/Release/plugins/j3270@DLLEXT@: src/java/* $(BINDIR)/Release/$(PACKAGE_TARNAME)$(EXEEXT)
+ @make BINDIR="../../$(BINDIR)" PW3270_LIBS="-L../../$(BINDIR)/Release@DLLDIR@ -l3270 -lpw3270" PW3270_CFLAGS="-I../include" -C $(dir $<) Release
+
#---[ Release targets ]--------------------------------------------------------
all: Release
diff --git a/configure.ac b/configure.ac
index 92449ef..3df0feb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -345,12 +345,67 @@ if test "$app_cv_java" = "yes" ; then
AC_PATH_TOOL([JAVADOC], [javadoc], [no], [$JDK_HOME/bin:$JRE_HOME/bin:$PATH])
EXTENSIONS="$EXTENSIONS java"
+ PLUGINS="$PLUGINS j3270"
fi
+# Set JVM arch
+case $host_cpu in
+
+x86_64)
+ jvm_arch=amd64
+ ;;
+
+i?86)
+ jvm_arch=i386
+ ;;
+
+*)
+ jvm_arch="$host_cpu"
+ ;;
+
+esac
+
+# JVMDIR
+if test "_$JVMDIR" = "_" ; then
+
+ case "$host" in
+ *-mingw32)
+ JVMDIR="\$(JRE_HOME)/bin"
+ ;;
+
+ *-apple-*)
+ JVMDIR="\$(JRE_HOME)/lib/$jvm_arch/server"
+ ;;
+
+ *)
+ JVMDIR="\$(JRE_HOME)/lib/$jvm_arch/server"
+ esac
+
+fi
+
+
+# Java link options depends on OS
+case "$host" in
+ *-mingw32)
+ jvm_libs="-L\$(JVMDIR) -Wl,-rpath,\$(JVMDIR) -ljvm"
+ ;;
+
+ *-apple-*)
+ jvm_libs="-L\$(JVMDIR) -Wl,-rpath,\$(JVMDIR) -ljvm"
+ ;;
+
+ *)
+ jvm_libs="-L\$(JVMDIR) -Wl,-rpath,\$(JVMDIR) -ljvm"
+esac
+
+
+AC_SUBST(JVM_LIBS,$jvm_libs)
+
AC_SUBST(JAVAC)
AC_SUBST(JAVAH)
AC_SUBST(JAVADOC)
+AC_SUBST(JVMDIR)
AC_SUBST(jnidir)
AC_SUBST(jvmjardir)
AC_SUBST(javadocdir)
diff --git a/pw3270.cbp b/pw3270.cbp
index ba1b2b0..dcf9f63 100644
--- a/pw3270.cbp
+++ b/pw3270.cbp
@@ -102,6 +102,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/Makefile.in b/src/java/Makefile.in
index 737a9ac..05e1086 100644
--- a/src/java/Makefile.in
+++ b/src/java/Makefile.in
@@ -25,7 +25,7 @@
#
PACKAGE_NAME=@PACKAGE_NAME@
-SOURCES=main.cc info.cc connect.cc getset.cc cursor.cc keyboard.cc actions.cc
+SOURCES=main.cc info.cc connect.cc getset.cc cursor.cc keyboard.cc actions.cc field.cc dialog.cc clipboard.cc
PLUGIN_SRC=plugin.cc
#---[ Paths ]------------------------------------------------------------------
@@ -55,6 +55,7 @@ JAR=@JAR@
JAVADOC=@JAVADOC@
JDK_HOME=@JDK_HOME@
JRE_HOME=@JRE_HOME@
+JVMDIR=@JVMDIR@
#---[ Paths ]------------------------------------------------------------------
@@ -78,8 +79,14 @@ include $(CLASSLIBDIR)/class.mak
#---[ Build options ]----------------------------------------------------------
CXXFLAGS=@CXXFLAGS@ @DLL_CFLAGS@ @JNI_CPPFLAGS@ -I../include
-PLUGIN_CFLAGS=@CXXFLAGS@ @DLL_CFLAGS@ @JNI_CPPFLAGS@ @GTK_CFLAGS@ @GTKMAC_CFLAGS@ -I../include
-PLUGINS_LIBS=@GTK_LIBS@ @GTKMAC_LIBS@
+
+PW3270_LIBS ?= -L../../.bin/Debug@DLLDIR@ -l3270 -lpw3270
+PW3270_CFLAGS ?= -I../include
+
+PLUGIN_CFLAGS=@CXXFLAGS@ @DLL_CFLAGS@ @JNI_CPPFLAGS@ -DJNIDIR="\"$(jnidir)\"" \
+ -DJARDIR="\"$(jvmjardir)\"" @GTK_CFLAGS@ @GTKMAC_CFLAGS@ $(PW3270_CFLAGS)
+
+PLUGIN_LIBS=@GTK_LIBS@ @GTKMAC_LIBS@ $(PW3270_LIBS) @JVM_LIBS@
#---[ Rules ]------------------------------------------------------------------
@@ -146,14 +153,14 @@ $(BINRLS)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@: \
@echo " LD `basename $@`"
@$(MKDIR) `dirname $@`
- @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) -o $@ $^ $(CLASS_LIBS)
+ @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) -Wl,-soname,`basename $@` -o $@ $^ $(CLASS_LIBS)
$(BINRLS)/plugins/j3270@DLLEXT@: \
$(foreach SRC, $(basename $(PLUGIN_SRC)), $(OBJRLS)/j3270/$(SRC)@OBJEXT@)
@echo " LD `basename $@`"
@$(MKDIR) `dirname $@`
- @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) -o $@ $^ $(CLASS_LIBS) $(PLUGIN_LIBS) -ljni3270
+ @$(CXX) @SYSDLL_FLAGS@ -Wl,--rpath,$(jnidir) $(LDFLAGS) -o $@ $^ $(CLASS_LIBS) $(PLUGIN_LIBS) -L$(BINDBG)@DLLDIR@ -ljni3270
#---[ Debug targets ]----------------------------------------------------------
@@ -167,7 +174,7 @@ $(BINDBG)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@: \
@echo " LD `basename $@`"
@$(MKDIR) `dirname $@`
- @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) -o $@ $^ $(CLASS_LIBS)
+ @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) -Wl,-soname,`basename $@` -o $@ $^ $(CLASS_LIBS)
$(BINDBG)/plugins/j3270@DLLEXT@: \
$(BINDBG)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ \
@@ -175,10 +182,10 @@ $(BINDBG)/plugins/j3270@DLLEXT@: \
@echo " LD `basename $@`"
@$(MKDIR) `dirname $@`
- @$(CXX) @SYSDLL_FLAGS@ @DBGRPATH@ $(LDFLAGS) -o $@ $^ $(CLASS_LIBS) $(PLUGIN_LIBS) -L$(BINDBG)@DLLDIR@ -ljni3270
+ $(CXX) @SYSDLL_FLAGS@ -Wl,--rpath,.bin/Debug@DLLDIR@ $(LDFLAGS) -Wl,-soname,`basename $@` -o $@ $^ $(CLASS_LIBS) $(PLUGIN_LIBS) -L$(BINDBG)@DLLDIR@ -ljni3270
run: $(BINDBG)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ $(BINDIR)/java/testprogram.class
- @LD_LIBRARY_PATH=../../.bin/Debug/lib/ java -Djava.library.path=$(BINDBG)@DLLDIR@ -cp .bin/java/ testprogram
+ @LD_LIBRARY_PATH=../../.bin/Debug@DLLDIR@/ java -Djava.library.path=$(BINDBG)@DLLDIR@ -cp .bin/java/ testprogram
#---[ Misc targets ]-----------------------------------------------------------
diff --git a/src/java/clipboard.cc b/src/java/clipboard.cc
new file mode 100644
index 0000000..e726e97
--- /dev/null
+++ b/src/java/clipboard.cc
@@ -0,0 +1,117 @@
+/*
+ * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
+ * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
+ * aplicativos mainframe. Registro no INPI sob o nome G3270.
+ *
+ * Copyright (C) <2008>
+ *
+ * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
+ * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
+ * Free Software Foundation.
+ *
+ * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
+ * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
+ * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
+ * obter mais detalhes.
+ *
+ * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
+ * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA, 02111-1307, USA
+ *
+ * Este programa está nomeado como dialog.cc e possui - linhas de código.
+ *
+ * Contatos:
+ *
+ * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
+ * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
+ *
+ */
+
+ #include "jni3270.h"
+ #include "private.h"
+
+/*---[ Implement ]----------------------------------------------------------------------------------*/
+
+JNIEXPORT jint JNICALL Java_pw3270_terminal_set_1copy(JNIEnv *env, jobject obj, jstring j_str) {
+
+ const char * str = env->GetStringUTFChars(j_str, 0);
+ jint rc = -1;
+
+ try {
+
+ rc = getHandle(env,obj)->set_copy(str);
+
+ } catch(std::exception &e) {
+
+ env->ReleaseStringUTFChars( j_str, str);
+ env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
+ return -1;
+
+ }
+
+ env->ReleaseStringUTFChars( j_str, str);
+ return rc;
+
+}
+
+JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1copy(JNIEnv *env, jobject obj) {
+
+ string str;
+
+ try {
+
+ str = getHandle(env,obj)->get_copy();
+
+
+ } catch(std::exception &e) {
+
+ env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
+
+ }
+
+ return env->NewStringUTF(str.c_str());
+
+
+}
+
+JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1clipboard(JNIEnv *env, jobject obj) {
+
+ string str;
+
+ try {
+
+ str = getHandle(env,obj)->get_clipboard();
+
+
+ } catch(std::exception &e) {
+
+ env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
+
+ }
+
+ return env->NewStringUTF(str.c_str());
+
+}
+
+JNIEXPORT jint JNICALL Java_pw3270_terminal_set_1clipboard(JNIEnv *env, jobject obj, jstring j_str) {
+
+ const char * str = env->GetStringUTFChars(j_str, 0);
+ jint rc = -1;
+
+ try {
+
+ rc = getHandle(env,obj)->set_clipboard(str);
+
+ } catch(std::exception &e) {
+
+ env->ReleaseStringUTFChars( j_str, str);
+ env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
+ return -1;
+
+ }
+
+ env->ReleaseStringUTFChars( j_str, str);
+ return rc;
+
+
+}
diff --git a/src/java/dialog.cc b/src/java/dialog.cc
new file mode 100644
index 0000000..25bb662
--- /dev/null
+++ b/src/java/dialog.cc
@@ -0,0 +1,91 @@
+/*
+ * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
+ * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
+ * aplicativos mainframe. Registro no INPI sob o nome G3270.
+ *
+ * Copyright (C) <2008>
+ *
+ * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
+ * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
+ * Free Software Foundation.
+ *
+ * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
+ * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
+ * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
+ * obter mais detalhes.
+ *
+ * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
+ * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA, 02111-1307, USA
+ *
+ * Este programa está nomeado como dialog.cc e possui - linhas de código.
+ *
+ * Contatos:
+ *
+ * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
+ * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
+ *
+ */
+
+ #include "jni3270.h"
+ #include "private.h"
+
+/*---[ Implement ]----------------------------------------------------------------------------------*/
+
+JNIEXPORT jint JNICALL Java_pw3270_terminal_popup_1dialog(JNIEnv *env, jobject obj, jint id, jstring j_title, jstring j_message, jstring j_secondary) {
+
+ const char * title = env->GetStringUTFChars(j_title, 0);
+ const char * message = env->GetStringUTFChars(j_message, 0);
+ const char * secondary = env->GetStringUTFChars(j_secondary, 0);
+ jint rc;
+
+ try {
+
+ rc = (jint) getHandle(env,obj)->popup_dialog((LIB3270_NOTIFY) id, title, message, secondary);
+
+ } catch(std::exception &e) {
+
+ env->ReleaseStringUTFChars( j_title, title);
+ env->ReleaseStringUTFChars( j_message, message);
+ env->ReleaseStringUTFChars( j_secondary, secondary);
+ env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
+
+ }
+
+ env->ReleaseStringUTFChars( j_title, title);
+ env->ReleaseStringUTFChars( j_message, message);
+ env->ReleaseStringUTFChars( j_secondary, secondary);
+
+ return rc;
+
+}
+
+JNIEXPORT jstring JNICALL Java_pw3270_terminal_file_1chooser_1dialog(JNIEnv *env, jobject obj, jint action, jstring j_title, jstring j_extension, jstring j_filename) {
+
+ string str;
+ const char * title = env->GetStringUTFChars(j_title, 0);
+ const char * extension = env->GetStringUTFChars(j_extension, 0);
+ const char * filename = env->GetStringUTFChars(j_filename, 0);
+ jint rc;
+
+ try {
+
+ str = getHandle(env,obj)->file_chooser_dialog((int) action, title, extension, filename);
+
+ } catch(std::exception &e) {
+
+ env->ReleaseStringUTFChars( j_title, title);
+ env->ReleaseStringUTFChars( j_extension, extension);
+ env->ReleaseStringUTFChars( j_filename, filename);
+ env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
+
+ }
+
+ env->ReleaseStringUTFChars( j_title, title);
+ env->ReleaseStringUTFChars( j_extension, extension);
+ env->ReleaseStringUTFChars( j_filename, filename);
+
+ return env->NewStringUTF(str.c_str());
+
+
+}
diff --git a/src/java/field.cc b/src/java/field.cc
new file mode 100644
index 0000000..8e32381
--- /dev/null
+++ b/src/java/field.cc
@@ -0,0 +1,91 @@
+/*
+ * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
+ * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
+ * aplicativos mainframe. Registro no INPI sob o nome G3270.
+ *
+ * Copyright (C) <2008>
+ *
+ * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
+ * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
+ * Free Software Foundation.
+ *
+ * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
+ * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
+ * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
+ * obter mais detalhes.
+ *
+ * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
+ * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA, 02111-1307, USA
+ *
+ * Este programa está nomeado como field.cc e possui - linhas de código.
+ *
+ * Contatos:
+ *
+ * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
+ * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
+ *
+ */
+
+ #include "jni3270.h"
+ #include "private.h"
+
+/*---[ Implement ]----------------------------------------------------------------------------------*/
+
+JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1field_1start (JNIEnv *env, jobject obj, jint baddr) {
+
+ jint rc;
+
+ try {
+
+ rc = getHandle(env,obj)->get_field_start((int) baddr);
+
+
+ } catch(std::exception &e) {
+
+ env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
+
+ }
+
+ return rc;
+
+}
+
+JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1field_1len (JNIEnv *env, jobject obj, jint baddr) {
+
+ jint rc;
+
+ try {
+
+ rc = getHandle(env,obj)->get_field_len((int) baddr);
+
+
+ } catch(std::exception &e) {
+
+ env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
+
+ }
+
+ return rc;
+
+}
+
+JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1next_1unprotected(JNIEnv *env, jobject obj, jint baddr) {
+
+ jint rc;
+
+ try {
+
+ rc = getHandle(env,obj)->get_next_unprotected((int) baddr);
+
+
+ } catch(std::exception &e) {
+
+ env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
+
+ }
+
+ return rc;
+
+
+}
diff --git a/src/java/getset.cc b/src/java/getset.cc
index a6e9765..313f619 100644
--- a/src/java/getset.cc
+++ b/src/java/getset.cc
@@ -138,3 +138,43 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_input_1string(JNIEnv *env, jobject o
}
+JNIEXPORT jboolean JNICALL Java_pw3270_terminal_is_1connected(JNIEnv *env, jobject obj) {
+
+ jboolean rc = false;
+
+ try {
+
+ rc = getHandle(env,obj)->is_connected();
+
+ } catch(std::exception &e) {
+
+ env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
+ return rc;
+
+ }
+
+
+ return rc;
+
+}
+
+JNIEXPORT jboolean JNICALL Java_pw3270_terminal_is_1ready(JNIEnv *env, jobject obj) {
+
+ jboolean rc = false;
+
+ try {
+
+ rc = getHandle(env,obj)->is_ready();
+
+ } catch(std::exception &e) {
+
+ env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
+ return rc;
+
+ }
+
+
+ return rc;
+
+}
+
diff --git a/src/java/jni3270.cbp b/src/java/jni3270.cbp
index b14e93d..d3b3bc9 100644
--- a/src/java/jni3270.cbp
+++ b/src/java/jni3270.cbp
@@ -39,12 +39,20 @@
+
+
+
+
+
+
+
+
diff --git a/src/java/main.cc b/src/java/main.cc
index b8c8e42..341990a 100644
--- a/src/java/main.cc
+++ b/src/java/main.cc
@@ -121,3 +121,23 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_wait_1for_1ready(JNIEnv *env, jobjec
return 0;
}
+
+JNIEXPORT void JNICALL Java_pw3270_terminal_log(JNIEnv *env, jobject obj, jstring j_str) {
+
+ const char * str = env->GetStringUTFChars(j_str, 0);
+
+ try {
+
+ getHandle(env,obj)->log("%s", str);
+
+ } catch(std::exception &e) {
+
+ env->ReleaseStringUTFChars( j_str, str);
+ env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
+ return;
+
+ }
+
+ env->ReleaseStringUTFChars( j_str, str);
+
+}
diff --git a/src/java/plugin.cc b/src/java/plugin.cc
index f8301e0..befe36b 100644
--- a/src/java/plugin.cc
+++ b/src/java/plugin.cc
@@ -313,7 +313,7 @@
LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window)
{
- trace("%s",__FUNCTION__);
+ trace("JAVA: %s",__FUNCTION__);
#if GTK_CHECK_VERSION(2,32,0)
g_mutex_init(&mutex);
#endif // GTK_CHECK_VERSION
@@ -326,7 +326,224 @@
#if GTK_CHECK_VERSION(2,32,0)
g_mutex_clear(&mutex);
#endif // GTK_CHECK_VERSION
- trace("%s",__FUNCTION__);
+ trace("JAVA: %s",__FUNCTION__);
return 0;
}
+ void call_java_program(GtkAction *action, GtkWidget *widget, const gchar *filename)
+ {
+
+#if GTK_CHECK_VERSION(2,32,0)
+ if(!g_mutex_trylock(&mutex)) {
+#else
+ if(!g_static_mutex_trylock(&mutex)) {
+#endif // GTK_CHECK_VERSION
+
+ GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CANCEL,
+ _( "Can't start %s program" ), "java" );
+
+ gtk_window_set_title(GTK_WINDOW(dialog),_( "JVM busy" ));
+ gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),_( "%s interpreter is busy" ), "java");
+
+ gtk_dialog_run(GTK_DIALOG (dialog));
+ gtk_widget_destroy(dialog);
+
+ return;
+ }
+
+ v3270_set_script(widget,'J',TRUE);
+
+ // Start JNI
+ JavaVMInitArgs vm_args;
+ JavaVMOption options[5];
+
+ JavaVM * jvm = NULL;
+ JNIEnv * env = NULL;
+ jint rc = 0;
+
+ memset(&vm_args,0,sizeof(vm_args));
+ memset(options,0,sizeof(options));
+
+ vm_args.version = JNI_VERSION_1_2;
+ vm_args.nOptions = 0;
+ vm_args.options = options;
+
+#ifdef DEBUG
+ options[vm_args.nOptions++].optionString = g_strdup("-verbose");
+#endif
+
+ gchar * dirname = g_path_get_dirname(filename);
+
+#if defined( WIN32 )
+
+ options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s",".");
+ options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.class.path=.;%s",dirname);
+
+#else
+
+ options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s",JNIDIR);
+ options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.class.path=%s:%s",JARDIR,dirname);
+
+#endif // JNIDIR
+
+ g_free(dirname);
+
+ rc = JNI_CreateJavaVM(&jvm,(void **)&env,&vm_args);
+
+ // Release options
+ for(size_t f=0;fFindClass(classname);
+
+ if(cls == 0) {
+
+ GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CANCEL,
+ _( "Can't find class %s" ), classname );
+
+ gtk_window_set_title(GTK_WINDOW(dialog), _( "Java script failure" ));
+ if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)
+ gtk_main_quit();
+ gtk_widget_destroy(dialog);
+
+ } else {
+
+ jmethodID mid = env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V");
+
+ if(mid == 0) {
+
+ GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK_CANCEL,
+ _( "Can't find class \"%s\"" ), classname );
+
+ gtk_window_set_title(GTK_WINDOW(dialog), _( "Java script failure" ));
+ if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)
+ gtk_main_quit();
+ gtk_widget_destroy(dialog);
+
+ } else {
+
+ jobjectArray args = env->NewObjectArray(0, env->FindClass("java/lang/String"), env->NewStringUTF(""));
+
+ env->CallStaticVoidMethod(cls, mid, args);
+
+ }
+
+ }
+
+ g_free(classname);
+
+
+ jvm->DestroyJavaVM();
+ }
+
+ // And release
+ v3270_set_script(widget,'J',FALSE);
+
+#if GTK_CHECK_VERSION(2,32,0)
+ g_mutex_unlock(&mutex);
+#else
+ g_static_mutex_unlock(&mutex);
+#endif // GTK_CHECK_VERSION
+
+
+ }
+
+
+extern "C"
+{
+ LIB3270_EXPORT void pw3270_action_java_activated(GtkAction *action, GtkWidget *widget)
+ {
+ gchar *filename = (gchar *) g_object_get_data(G_OBJECT(action),"src");
+
+ lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p",gtk_action_get_name(action),widget);
+
+#if GTK_CHECK_VERSION(3,10,0)
+ g_simple_action_set_enabled(G_SIMPLE_ACTION(action),FALSE);
+#else
+ gtk_action_set_sensitive(action,FALSE);
+#endif // GTK(3,10)
+
+ if(filename)
+ {
+ // Has filename, call it directly
+ call_java_program(action,widget,filename);
+ }
+ else
+ {
+ // No filename, ask user
+ static const struct _list
+ {
+ const gchar *name;
+ const gchar *pattern;
+ } list[] =
+ {
+ { N_( "Java class file" ), "*.class" }
+ };
+
+ GtkFileFilter * filter[G_N_ELEMENTS(list)+1];
+ unsigned int f;
+
+ memset(filter,0,sizeof(filter));
+
+ for(f=0;f
+
+ Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
+ os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
+ Free Software Foundation.
+
+ Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
+ GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
+ A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
+ obter mais detalhes.
+
+ Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
+ programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
+ St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+ Contatos:
+
+ perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
+ erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
+ licinio@bb.com.br (Licínio Luis Branco)
+ kraucer@bb.com.br (Kraucer Fernandes Mazuco)
+
+------------------------------------------------------------------------------>
+
+
+
+
+
+
+
+
+
+
--
libgit2 0.21.2