diff --git a/Makefile.in b/Makefile.in
index 4c15985..de5a7b4 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -211,7 +211,8 @@ $(BINRLS)/$(PLUGIN): \
@make -C src/plugin $@
Debug: \
- $(BINDBG)/$(LIBNAME)
+ $(BINDBG)/$(LIBNAME) \
+ $(BINDBG)/$(PLUGIN)
run: \
$(BINDBG)/$(LIBNAME) \
@@ -233,6 +234,9 @@ $(BINDBG)/$(PLUGIN): \
@make -C src/plugin $@
+cleanDebug: \
+ clean
+
clean:
@rm -fr $(BINDIR)
@rm -fr $(OBJDIR)
diff --git a/pw3270-java.cbp b/pw3270-java.cbp
index 7924cc2..95e6bae 100644
--- a/pw3270-java.cbp
+++ b/pw3270-java.cbp
@@ -3,6 +3,7 @@
+
@@ -47,7 +48,10 @@
+
+
+
diff --git a/src/plugin/Makefile.in b/src/plugin/Makefile.in
index d006114..9018c25 100644
--- a/src/plugin/Makefile.in
+++ b/src/plugin/Makefile.in
@@ -67,8 +67,8 @@ CXX=@CXX@
CC=@CC@
LD=@CXX@
-LIBS=-lpw3270cpp @LIBS@ @GTK_LIBS@ @REXX_LIBS@
-CFLAGS=-I$(BASEDIR)/src/include @CFLAGS@ @GTK_CFLAGS@
+LIBS=-lpw3270cpp @LIBS@ @GTK_LIBS@
+CXXFLAGS=@CXXFLAGS@ @GTK_CFLAGS@
LDFLAGS=@LDFLAGS@
#---[ Rules ]----------------------------------------------------------------------------
@@ -80,7 +80,7 @@ $(OBJDBG)/%.o: \
@echo $< ...
@$(MKDIR) `dirname $@`
- @$(CXX) $(CFLAGS) -fstack-check -DDEBUG=1 \
+ @$(CXX) $(CXXFLAGS) -fstack-check -DDEBUG=1 \
-DBUILD_DATE=`date +"0x%Y%m%d"`\
-g -o $@ -c $<
@@ -91,7 +91,7 @@ $(OBJRLS)/%.o: \
@echo $< ...
@$(MKDIR) `dirname $@`
- @$(CXX) $(CFLAGS) -DNDEBUG=1 \
+ @$(CXX) $(CXXFLAGS) -DNDEBUG=1 \
-DBUILD_DATE=`date +"0x%Y%m%d"` \
-o $@ -c $<
diff --git a/src/plugin/call.cc b/src/plugin/call.cc
index cb93b20..3e2b65c 100644
--- a/src/plugin/call.cc
+++ b/src/plugin/call.cc
@@ -29,137 +29,99 @@
#include "private.h"
- #include
+ #include
#include
#include
+ #include
/*---[ Implement ]----------------------------------------------------------------------------------*/
-namespace PW3270_NAMESPACE {
+void call(GtkWidget *widget, const char *classname) {
+ debug("%s(%s)",__FUNCTION__,classname);
- void java::call(GtkWidget *widget, const char *classname) {
+ if(!trylock()) {
- debug("%s(%s)",__FUNCTION__,classname);
+ failed(widget, _( "Can't access java virtual machine" ), "%s", strerror(EBUSY));
+ return;
- if(!trylock()) {
-
- failed(widget, _( "Can't access java virtual machine" ), "%s", strerror(EBUSY));
- return;
-
- }
-
- if(jvm || load_jvm(widget)) {
-
- v3270_set_script(widget,'J',TRUE);
-
- try {
-
- jclass cls;
- jmethodID mid;
-
- /*
-
- DONT WORK!!
- http://stackoverflow.com/questions/271506/why-cant-system-setproperty-change-the-classpath-at-runtime
-
- // Atualizar o classpath
- cls = env->FindClass("java/lang/System");
- if(!cls) {
- throw exception( _( "Can't find class %s" ), "java/lang/System");
- }
-
- mid = env->GetStaticMethodID(cls, "setProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
- if(!mid) {
- throw exception( _( "Can't find method %s/%s" ), "java/lang/System","setProperty");
- }
-
- lib3270_trace_event(v3270_get_session(widget),"java.class.path=%s\n",classpath);
-
- jstring name = env->NewStringUTF("java.class.path");
- jstring path = env->NewStringUTF(classpath);
+ }
- jstring rc = (jstring) env->CallObjectMethod(cls,mid,name,path);
+ if(jvm || load_jvm(widget)) {
- env->DeleteLocalRef(name);
- env->DeleteLocalRef(path);
- env->DeleteLocalRef(rc);
- */
+ v3270_set_script(widget,'J',TRUE);
- // Get application entry point.
- cls = env->FindClass(classname);
- if(!cls) {
- throw exception( _( "Can't find class %s" ), classname);
- }
+ try {
- mid = env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V");
- if(!mid) {
- throw exception( _( "Can't find method %s/%s" ), classname, "main");
- }
+ jclass cls;
+ jmethodID mid;
- // Build arguments
- jobjectArray args = env->NewObjectArray(0, env->FindClass("java/lang/String"), env->NewStringUTF(""));
-
- // Call main()
- env->CallStaticVoidMethod(cls, mid, args);
+ // Get application entry point.
+ cls = env->FindClass(classname);
+ if(!cls) {
+ throw exception( _( "Can't find class %s" ), classname);
+ }
- // Check for exception
- jthrowable exc = env->ExceptionOccurred();
- env->ExceptionClear();
+ mid = env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V");
+ if(!mid) {
+ throw exception( _( "Can't find method %s/%s" ), classname, "main");
+ }
- if (exc) {
- jclass throwable_class = env->FindClass("java/lang/Throwable");
+ // Build arguments
+ jobjectArray args = env->NewObjectArray(0, env->FindClass("java/lang/String"), env->NewStringUTF(""));
- jmethodID jni_getMessage = env->GetMethodID(throwable_class,"getMessage","()Ljava/lang/String;");
- jstring j_msg = (jstring) env->CallObjectMethod(exc,jni_getMessage);
+ // Call main()
+ env->CallStaticVoidMethod(cls, mid, args);
- 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,
- _( "Java application \"%s\" has failed." ), classname );
+ // Check for exception
+ jthrowable exc = env->ExceptionOccurred();
+ env->ExceptionClear();
- gtk_window_set_title(GTK_WINDOW(dialog), _( "Java error" ));
+ if (exc) {
+ jclass throwable_class = env->FindClass("java/lang/Throwable");
- if(!env->IsSameObject(j_msg,NULL)) {
+ jmethodID jni_getMessage = env->GetMethodID(throwable_class,"getMessage","()Ljava/lang/String;");
+ jstring j_msg = (jstring) env->CallObjectMethod(exc,jni_getMessage);
- const char * msg = env->GetStringUTFChars(j_msg, 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,
+ _( "Java application \"%s\" has failed." ), classname );
- gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",msg);
+ gtk_window_set_title(GTK_WINDOW(dialog), _( "Java error" ));
- env->ReleaseStringUTFChars( j_msg, msg);
- }
+ if(!env->IsSameObject(j_msg,NULL)) {
- if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)
- gtk_main_quit();
- gtk_widget_destroy(dialog);
+ const char * msg = env->GetStringUTFChars(j_msg, 0);
+ gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",msg);
+ env->ReleaseStringUTFChars( j_msg, msg);
}
- // And finish
- env->DeleteLocalRef(args);
+ if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)
+ gtk_main_quit();
+ gtk_widget_destroy(dialog);
- } catch(std::exception &e) {
-
- failed(widget,_("Can't start java application"),"%s", e.what());
}
-/*
- g_free(dirname);
- g_free(classname);
- g_free(classpath);
-*/
+ // And finish
+ env->DeleteLocalRef(args);
- v3270_set_script(widget,'J',FALSE);
+ } catch(std::exception &e) {
- }
+ failed(widget,_("Can't start java application"),"%s", e.what());
- unlock();
+ }
+ v3270_set_script(widget,'J',FALSE);
}
+ unlock();
+
+
}
diff --git a/src/plugin/plugin.cc b/src/plugin/plugin.cc
index b19a724..79e20b1 100644
--- a/src/plugin/plugin.cc
+++ b/src/plugin/plugin.cc
@@ -51,12 +51,11 @@
#include
#include
- #include
+ #include
#include
#include
#include
#include
- #include
#include
@@ -75,7 +74,7 @@
namespace PW3270_NAMESPACE {
- void java::lock() {
+ void lock() {
#if GTK_CHECK_VERSION(2,32,0)
g_mutex_lock(&mutex);
#else
@@ -83,7 +82,7 @@ namespace PW3270_NAMESPACE {
#endif // GTK_CHECK_VERSION
}
- void java::unlock() {
+ void unlock() {
#if GTK_CHECK_VERSION(2,32,0)
g_mutex_unlock(&mutex);
#else
@@ -91,7 +90,7 @@ namespace PW3270_NAMESPACE {
#endif // GTK_CHECK_VERSION
}
- bool java::trylock() {
+ bool trylock() {
#if GTK_CHECK_VERSION(2,32,0)
return g_mutex_trylock(&mutex);
#else
diff --git a/src/plugin/private.h b/src/plugin/private.h
new file mode 100644
index 0000000..e0b80a5
--- /dev/null
+++ b/src/plugin/private.h
@@ -0,0 +1,59 @@
+/*
+ * "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 private.h e possui - linhas de código.
+ *
+ * Contatos:
+ *
+ * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
+ * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
+ *
+ * Referências:
+ *
+ * http://thebreakfastpost.com/2012/01/26/wrapping-a-c-library-with-jni-part-2/
+ *
+ */
+#ifndef PRIVATE_H_INCLUDED
+
+ #define PRIVATE_H_INCLUDED
+
+ #include
+
+ #include
+
+ #include
+ #include
+
+ #include
+ #include
+
+ G_GNUC_INTERNAL JavaVM * jvm;
+ G_GNUC_INTERNAL JNIEnv * env;
+
+ G_GNUC_INTERNAL bool load_jvm(GtkWidget *widget);
+ G_GNUC_INTERNAL void call(GtkWidget *widget, const char *classname);
+ G_GNUC_INTERNAL void lock();
+ G_GNUC_INTERNAL void unlock();
+ G_GNUC_INTERNAL bool trylock();
+ G_GNUC_INTERNAL void failed(GtkWidget *widget, const char *msg, const char *format, ...);
+
+ using namespace std;
+
+#endif // PRIVATE_H_INCLUDED
diff --git a/src/plugin/startstop.cc b/src/plugin/startstop.cc
index 67a75c6..40df1ea 100644
--- a/src/plugin/startstop.cc
+++ b/src/plugin/startstop.cc
@@ -131,289 +131,283 @@ extern "C" {
}
- namespace PW3270_NAMESPACE {
+JavaVM * jvm = NULL;
+JNIEnv * env = NULL;
- JavaVM * java::jvm = NULL;
- JNIEnv * java::env = NULL;
-#ifdef _WIN32
- HMODULE java::hModule = NULL;
-#endif // _WIN32
+void failed(GtkWidget *widget, const char *msg, const char *format, ...) {
- void java::failed(GtkWidget *widget, const char *msg, const char *format, ...) {
+ 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,
+ "%s", msg );
- 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,
- "%s", msg );
+ gtk_window_set_title(GTK_WINDOW(dialog), _( "Java error" ));
- gtk_window_set_title(GTK_WINDOW(dialog), _( "Java error" ));
+ if(format) {
- if(format) {
+ va_list arg_ptr;
+ va_start(arg_ptr, format);
+ gchar *msg = g_strdup_vprintf(format,arg_ptr);
+ va_end(arg_ptr);
+ gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",msg);
+ g_free(msg);
- va_list arg_ptr;
- va_start(arg_ptr, format);
- gchar *msg = g_strdup_vprintf(format,arg_ptr);
- va_end(arg_ptr);
- gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",msg);
- g_free(msg);
-
- }
+ }
- if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)
- gtk_main_quit();
- gtk_widget_destroy(dialog);
+ if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)
+ gtk_main_quit();
+ gtk_widget_destroy(dialog);
- }
+}
#ifdef WIN32
- bool java::load_jvm(GtkWidget *widget) {
+bool load_jvm(GtkWidget *widget) {
- if(jvm != NULL) {
- return true;
- }
+ if(jvm != NULL) {
+ return true;
+ }
- // Dynamically load jvm library to avoid naming and path problems.
- HMODULE kernel;
- HANDLE WINAPI (*AddDllDirectory)(PCWSTR NewDirectory);
- BOOL WINAPI (*RemoveDllDirectory)(HANDLE Cookie);
+ // Dynamically load jvm library to avoid naming and path problems.
+ HMODULE kernel;
+ HANDLE WINAPI (*AddDllDirectory)(PCWSTR NewDirectory);
+ BOOL WINAPI (*RemoveDllDirectory)(HANDLE Cookie);
- struct _dlldir {
- const gchar * env;
- const gchar * path;
- HANDLE cookie;
- } dlldir[] = {
- { "JRE_HOME", "bin\\client", 0 },
- { "JDK_HOME", "jre\\bin\\client", 0 }
- };
+ struct _dlldir {
+ const gchar * env;
+ const gchar * path;
+ HANDLE cookie;
+ } dlldir[] = {
+ { "JRE_HOME", "bin\\client", 0 },
+ { "JDK_HOME", "jre\\bin\\client", 0 }
+ };
- kernel = LoadLibrary("kernel32.dll");
+ kernel = LoadLibrary("kernel32.dll");
- if(kernel) {
+ if(kernel) {
- AddDllDirectory = (HANDLE WINAPI (*)(PCWSTR)) GetProcAddress(kernel,"AddDllDirectory");
- if(AddDllDirectory) {
+ AddDllDirectory = (HANDLE WINAPI (*)(PCWSTR)) GetProcAddress(kernel,"AddDllDirectory");
+ if(AddDllDirectory) {
- // Acrescenta mais caminhos para achar a dll
- for(size_t f = 0; f < G_N_ELEMENTS(dlldir); f++) {
+ // Acrescenta mais caminhos para achar a dll
+ for(size_t f = 0; f < G_N_ELEMENTS(dlldir); f++) {
- const char *env = getenv(dlldir[f].env);
+ const char *env = getenv(dlldir[f].env);
- debug("%s=\"%s\"",dlldir[f].env,env);
+ debug("%s=\"%s\"",dlldir[f].env,env);
- if(env) {
+ if(env) {
- gchar *p = g_build_filename(env,dlldir[f].path,NULL);
+ gchar *p = g_build_filename(env,dlldir[f].path,NULL);
- lib3270_trace_event(v3270_get_session(widget),"Adding \"%s\" to DLL search path",p);
+ lib3270_trace_event(v3270_get_session(widget),"Adding \"%s\" to DLL search path",p);
- wchar_t *path = (wchar_t *) malloc(4096*sizeof(wchar_t));
- mbstowcs(path, p, 4095);
- dlldir[f].cookie = AddDllDirectory(path);
- free(path);
+ wchar_t *path = (wchar_t *) malloc(4096*sizeof(wchar_t));
+ mbstowcs(path, p, 4095);
+ dlldir[f].cookie = AddDllDirectory(path);
+ free(path);
- g_free(p);
+ g_free(p);
- }
}
-
- } else {
-
- lib3270_trace_event(v3270_get_session(widget),"Can't find %s: %s","AddDllDirectory",session::win32_strerror(GetLastError()).c_str());
-
}
} else {
- lib3270_trace_event(v3270_get_session(widget),"Can't load %s: %s\n","kernel32.dll",session::win32_strerror(GetLastError()).c_str());
+ lib3270_trace_event(v3270_get_session(widget),"Can't find %s: %s","AddDllDirectory",session::win32_strerror(GetLastError()).c_str());
}
- hModule = LoadLibrary("jvm.dll");
- if(!hModule) {
- lib3270_trace_event(v3270_get_session(widget),"Can't load %s\n","jvm.dll",session::win32_strerror(GetLastError()).c_str());
+ } else {
- for(size_t f = 0; !hModule && f < G_N_ELEMENTS(dlldir); f++) {
+ lib3270_trace_event(v3270_get_session(widget),"Can't load %s: %s\n","kernel32.dll",session::win32_strerror(GetLastError()).c_str());
- const char *env = getenv(dlldir[f].env);
+ }
- debug("%s=\"%s\"",dlldir[f].env,env);
+ hModule = LoadLibrary("jvm.dll");
+ if(!hModule) {
+ lib3270_trace_event(v3270_get_session(widget),"Can't load %s\n","jvm.dll",session::win32_strerror(GetLastError()).c_str());
- if(env) {
+ for(size_t f = 0; !hModule && f < G_N_ELEMENTS(dlldir); f++) {
- gchar *p = g_build_filename(env,dlldir[f].path,"jvm.dll",NULL);
- hModule = LoadLibrary(p);
- if(!hModule) {
- lib3270_trace_event(v3270_get_session(widget),"Can't load %s: %s\n",p,session::win32_strerror(GetLastError()).c_str());
- }
- g_free(p);
+ const char *env = getenv(dlldir[f].env);
+ debug("%s=\"%s\"",dlldir[f].env,env);
+
+ if(env) {
+
+ gchar *p = g_build_filename(env,dlldir[f].path,"jvm.dll",NULL);
+ hModule = LoadLibrary(p);
+ if(!hModule) {
+ lib3270_trace_event(v3270_get_session(widget),"Can't load %s: %s\n",p,session::win32_strerror(GetLastError()).c_str());
}
+ g_free(p);
+
}
}
+ }
- if(!hModule) {
- failed(widget, _( "Can't load java virtual machine" ), "%s", session::win32_strerror(GetLastError()).c_str());
- }
+ if(!hModule) {
+ failed(widget, _( "Can't load java virtual machine" ), "%s", session::win32_strerror(GetLastError()).c_str());
+ }
- if(kernel) {
+ if(kernel) {
- RemoveDllDirectory = (BOOL WINAPI (*)(HANDLE)) GetProcAddress(kernel,"RemoveDllDirectory");
- if(RemoveDllDirectory) {
+ RemoveDllDirectory = (BOOL WINAPI (*)(HANDLE)) GetProcAddress(kernel,"RemoveDllDirectory");
+ if(RemoveDllDirectory) {
- for(size_t f = 0; f < G_N_ELEMENTS(dlldir); f++) {
+ for(size_t f = 0; f < G_N_ELEMENTS(dlldir); f++) {
- if(dlldir[f].cookie) {
+ if(dlldir[f].cookie) {
- RemoveDllDirectory(dlldir[f].cookie);
+ RemoveDllDirectory(dlldir[f].cookie);
- }
}
-
}
- FreeLibrary(kernel);
-
}
- if(!hModule) {
- return false;
- }
+ FreeLibrary(kernel);
- // Consegui carregar a JVM, obtenho o método de controle
- jint JNICALL (*CreateJavaVM)(JavaVM **, void **, void *) = (jint JNICALL (*)(JavaVM **, void **, void *)) GetProcAddress(hModule,"JNI_CreateJavaVM");
+ }
- if(!CreateJavaVM) {
- failed(widget, _( "Can't load java virtual machine creation method" ), "%s", session::win32_strerror(GetLastError()).c_str());
- return false;
- }
+ if(!hModule) {
+ return false;
+ }
- // Crio a JVM
- JavaVMInitArgs vm_args;
- JavaVMOption options[5];
+ // Consegui carregar a JVM, obtenho o método de controle
+ jint JNICALL (*CreateJavaVM)(JavaVM **, void **, void *) = (jint JNICALL (*)(JavaVM **, void **, void *)) GetProcAddress(hModule,"JNI_CreateJavaVM");
- jint rc = 0;
+ if(!CreateJavaVM) {
+ failed(widget, _( "Can't load java virtual machine creation method" ), "%s", session::win32_strerror(GetLastError()).c_str());
+ return false;
+ }
- memset(&vm_args,0,sizeof(vm_args));
- memset(options,0,sizeof(options));
+ // Crio a JVM
+ JavaVMInitArgs vm_args;
+ JavaVMOption options[5];
- vm_args.version = JNI_VERSION_1_4;
- vm_args.nOptions = 0;
- vm_args.options = options;
- vm_args.ignoreUnrecognized = JNI_FALSE;
+ jint rc = 0;
- options[vm_args.nOptions].optionString = g_strdup("vfprintf");
- options[vm_args.nOptions].extraInfo = (void *) jni_vfprintf;
- vm_args.nOptions++;
+ memset(&vm_args,0,sizeof(vm_args));
+ memset(options,0,sizeof(options));
- gchar * exports = NULL;
- char buffer[1024];
- gchar * myDir;
+ vm_args.version = JNI_VERSION_1_4;
+ vm_args.nOptions = 0;
+ vm_args.options = options;
+ vm_args.ignoreUnrecognized = JNI_FALSE;
- if(GetModuleFileName(NULL,buffer,sizeof(buffer)) < sizeof(buffer)) {
+ options[vm_args.nOptions].optionString = g_strdup("vfprintf");
+ options[vm_args.nOptions].extraInfo = (void *) jni_vfprintf;
+ vm_args.nOptions++;
- gchar * ptr = strrchr(buffer,G_DIR_SEPARATOR);
- if(ptr) {
- *ptr = 0;
- myDir = g_strdup(buffer);
- } else {
- myDir = g_strdup(".");
- }
+ gchar * exports = NULL;
+ char buffer[1024];
+ gchar * myDir;
+ if(GetModuleFileName(NULL,buffer,sizeof(buffer)) < sizeof(buffer)) {
+ gchar * ptr = strrchr(buffer,G_DIR_SEPARATOR);
+ if(ptr) {
+ *ptr = 0;
+ myDir = g_strdup(buffer);
} else {
-
myDir = g_strdup(".");
-
}
- debug("myDir=%s",myDir);
- exports = g_build_filename(myDir,"jvm-exports",NULL);
- g_mkdir_with_parents(exports,0777);
+ } else {
- lib3270_trace_event(v3270_get_session(widget),"java.class.path=%s",exports);
- lib3270_trace_event(v3270_get_session(widget),"java.library.path=%s",myDir);
+ myDir = g_strdup(".");
- options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.class.path=%s",exports);
- options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s",myDir);
+ }
- g_free(myDir);
- g_free(exports);
+ debug("myDir=%s",myDir);
- rc = CreateJavaVM(&jvm,(void **)&env,&vm_args);
- if(rc < 0) {
- failed(widget, _( "Can't create java VM" ), _( "The error code was %d" ), (int) rc);
- jvm = NULL;
- }
+ exports = g_build_filename(myDir,"jvm-exports",NULL);
+ g_mkdir_with_parents(exports,0777);
- for(int f=0;f