Commit 70fe145b4cdfa3f054600e78b41857228d748cf6

Authored by perry.werneck@gmail.com
1 parent 9cc790e6

Incluindo plugin java

Makefile.in
... ... @@ -136,6 +136,12 @@ $(BINDIR)/Debug/plugins/%@DLLEXT@: src/plugins/%/* $(BINDIR)/Debug/$(PACKAGE_TAR
136 136 $(BINDIR)/Release/plugins/%@DLLEXT@: src/plugins/%/* $(BINDIR)/Release/$(PACKAGE_TARNAME)$(EXEEXT)
137 137 @make $(PLUGIN_RELEASE_ARGS) -C $(dir $<) Release
138 138  
  139 +$(BINDIR)/Debug/plugins/j3270@DLLEXT@: src/java/* $(BINDIR)/Debug/$(PACKAGE_TARNAME)$(EXEEXT)
  140 + @make BINDIR="../../$(BINDIR)" PW3270_LIBS="-L../../$(BINDIR)/Debug@DLLDIR@ -l3270 -lpw3270" PW3270_CFLAGS="-I../include" -C $(dir $<) Debug
  141 +
  142 +$(BINDIR)/Release/plugins/j3270@DLLEXT@: src/java/* $(BINDIR)/Release/$(PACKAGE_TARNAME)$(EXEEXT)
  143 + @make BINDIR="../../$(BINDIR)" PW3270_LIBS="-L../../$(BINDIR)/Release@DLLDIR@ -l3270 -lpw3270" PW3270_CFLAGS="-I../include" -C $(dir $<) Release
  144 +
139 145 #---[ Release targets ]--------------------------------------------------------
140 146  
141 147 all: Release
... ...
configure.ac
... ... @@ -345,12 +345,67 @@ if test &quot;$app_cv_java&quot; = &quot;yes&quot; ; then
345 345 AC_PATH_TOOL([JAVADOC], [javadoc], [no], [$JDK_HOME/bin:$JRE_HOME/bin:$PATH])
346 346  
347 347 EXTENSIONS="$EXTENSIONS java"
  348 + PLUGINS="$PLUGINS j3270"
348 349  
349 350 fi
350 351  
  352 +# Set JVM arch
  353 +case $host_cpu in
  354 +
  355 +x86_64)
  356 + jvm_arch=amd64
  357 + ;;
  358 +
  359 +i?86)
  360 + jvm_arch=i386
  361 + ;;
  362 +
  363 +*)
  364 + jvm_arch="$host_cpu"
  365 + ;;
  366 +
  367 +esac
  368 +
  369 +# JVMDIR
  370 +if test "_$JVMDIR" = "_" ; then
  371 +
  372 + case "$host" in
  373 + *-mingw32)
  374 + JVMDIR="\$(JRE_HOME)/bin"
  375 + ;;
  376 +
  377 + *-apple-*)
  378 + JVMDIR="\$(JRE_HOME)/lib/$jvm_arch/server"
  379 + ;;
  380 +
  381 + *)
  382 + JVMDIR="\$(JRE_HOME)/lib/$jvm_arch/server"
  383 + esac
  384 +
  385 +fi
  386 +
  387 +
  388 +# Java link options depends on OS
  389 +case "$host" in
  390 + *-mingw32)
  391 + jvm_libs="-L\$(JVMDIR) -Wl,-rpath,\$(JVMDIR) -ljvm"
  392 + ;;
  393 +
  394 + *-apple-*)
  395 + jvm_libs="-L\$(JVMDIR) -Wl,-rpath,\$(JVMDIR) -ljvm"
  396 + ;;
  397 +
  398 + *)
  399 + jvm_libs="-L\$(JVMDIR) -Wl,-rpath,\$(JVMDIR) -ljvm"
  400 +esac
  401 +
  402 +
  403 +AC_SUBST(JVM_LIBS,$jvm_libs)
  404 +
351 405 AC_SUBST(JAVAC)
352 406 AC_SUBST(JAVAH)
353 407 AC_SUBST(JAVADOC)
  408 +AC_SUBST(JVMDIR)
354 409 AC_SUBST(jnidir)
355 410 AC_SUBST(jvmjardir)
356 411 AC_SUBST(javadocdir)
... ...
pw3270.cbp
... ... @@ -102,6 +102,62 @@
102 102 <Unit filename="src/include/pw3270/trace.h" />
103 103 <Unit filename="src/include/pw3270/v3270.h" />
104 104 <Unit filename="src/include/rules.mak.in" />
  105 + <Unit filename="src/java/Makefile.in">
  106 + <Option target="Debug" />
  107 + <Option target="Release" />
  108 + </Unit>
  109 + <Unit filename="src/java/actions.cc">
  110 + <Option target="Debug" />
  111 + <Option target="Release" />
  112 + </Unit>
  113 + <Unit filename="src/java/connect.cc">
  114 + <Option target="Debug" />
  115 + <Option target="Release" />
  116 + </Unit>
  117 + <Unit filename="src/java/cursor.cc">
  118 + <Option target="Debug" />
  119 + <Option target="Release" />
  120 + </Unit>
  121 + <Unit filename="src/java/getset.cc">
  122 + <Option target="Debug" />
  123 + <Option target="Release" />
  124 + </Unit>
  125 + <Unit filename="src/java/info.cc">
  126 + <Option target="Debug" />
  127 + <Option target="Release" />
  128 + </Unit>
  129 + <Unit filename="src/java/keyboard.cc">
  130 + <Option target="Debug" />
  131 + <Option target="Release" />
  132 + </Unit>
  133 + <Unit filename="src/java/main.cc">
  134 + <Option target="Debug" />
  135 + <Option target="Release" />
  136 + </Unit>
  137 + <Unit filename="src/java/plugin.cc">
  138 + <Option target="Debug" />
  139 + <Option target="Release" />
  140 + </Unit>
  141 + <Unit filename="src/java/private.h">
  142 + <Option target="Debug" />
  143 + <Option target="Release" />
  144 + </Unit>
  145 + <Unit filename="src/java/sample/bbsample.java">
  146 + <Option target="Debug" />
  147 + <Option target="Release" />
  148 + </Unit>
  149 + <Unit filename="src/java/sample/efglobe.java">
  150 + <Option target="Debug" />
  151 + <Option target="Release" />
  152 + </Unit>
  153 + <Unit filename="src/java/terminal.java">
  154 + <Option target="Debug" />
  155 + <Option target="Release" />
  156 + </Unit>
  157 + <Unit filename="src/java/testprogram.java">
  158 + <Option target="Debug" />
  159 + <Option target="Release" />
  160 + </Unit>
105 161 <Unit filename="src/lib3270/3270ds.h" />
106 162 <Unit filename="src/lib3270/Makefile.in" />
107 163 <Unit filename="src/lib3270/X11keysym.h" />
... ...
src/java/Makefile.in
... ... @@ -25,7 +25,7 @@
25 25 #
26 26  
27 27 PACKAGE_NAME=@PACKAGE_NAME@
28   -SOURCES=main.cc info.cc connect.cc getset.cc cursor.cc keyboard.cc actions.cc
  28 +SOURCES=main.cc info.cc connect.cc getset.cc cursor.cc keyboard.cc actions.cc field.cc dialog.cc clipboard.cc
29 29 PLUGIN_SRC=plugin.cc
30 30  
31 31 #---[ Paths ]------------------------------------------------------------------
... ... @@ -55,6 +55,7 @@ JAR=@JAR@
55 55 JAVADOC=@JAVADOC@
56 56 JDK_HOME=@JDK_HOME@
57 57 JRE_HOME=@JRE_HOME@
  58 +JVMDIR=@JVMDIR@
58 59  
59 60 #---[ Paths ]------------------------------------------------------------------
60 61  
... ... @@ -78,8 +79,14 @@ include $(CLASSLIBDIR)/class.mak
78 79 #---[ Build options ]----------------------------------------------------------
79 80  
80 81 CXXFLAGS=@CXXFLAGS@ @DLL_CFLAGS@ @JNI_CPPFLAGS@ -I../include
81   -PLUGIN_CFLAGS=@CXXFLAGS@ @DLL_CFLAGS@ @JNI_CPPFLAGS@ @GTK_CFLAGS@ @GTKMAC_CFLAGS@ -I../include
82   -PLUGINS_LIBS=@GTK_LIBS@ @GTKMAC_LIBS@
  82 +
  83 +PW3270_LIBS ?= -L../../.bin/Debug@DLLDIR@ -l3270 -lpw3270
  84 +PW3270_CFLAGS ?= -I../include
  85 +
  86 +PLUGIN_CFLAGS=@CXXFLAGS@ @DLL_CFLAGS@ @JNI_CPPFLAGS@ -DJNIDIR="\"$(jnidir)\"" \
  87 + -DJARDIR="\"$(jvmjardir)\"" @GTK_CFLAGS@ @GTKMAC_CFLAGS@ $(PW3270_CFLAGS)
  88 +
  89 +PLUGIN_LIBS=@GTK_LIBS@ @GTKMAC_LIBS@ $(PW3270_LIBS) @JVM_LIBS@
83 90  
84 91 #---[ Rules ]------------------------------------------------------------------
85 92  
... ... @@ -146,14 +153,14 @@ $(BINRLS)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@: \
146 153  
147 154 @echo " LD `basename $@`"
148 155 @$(MKDIR) `dirname $@`
149   - @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) -o $@ $^ $(CLASS_LIBS)
  156 + @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) -Wl,-soname,`basename $@` -o $@ $^ $(CLASS_LIBS)
150 157  
151 158 $(BINRLS)/plugins/j3270@DLLEXT@: \
152 159 $(foreach SRC, $(basename $(PLUGIN_SRC)), $(OBJRLS)/j3270/$(SRC)@OBJEXT@)
153 160  
154 161 @echo " LD `basename $@`"
155 162 @$(MKDIR) `dirname $@`
156   - @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) -o $@ $^ $(CLASS_LIBS) $(PLUGIN_LIBS) -ljni3270
  163 + @$(CXX) @SYSDLL_FLAGS@ -Wl,--rpath,$(jnidir) $(LDFLAGS) -o $@ $^ $(CLASS_LIBS) $(PLUGIN_LIBS) -L$(BINDBG)@DLLDIR@ -ljni3270
157 164  
158 165 #---[ Debug targets ]----------------------------------------------------------
159 166  
... ... @@ -167,7 +174,7 @@ $(BINDBG)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@: \
167 174  
168 175 @echo " LD `basename $@`"
169 176 @$(MKDIR) `dirname $@`
170   - @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) -o $@ $^ $(CLASS_LIBS)
  177 + @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) -Wl,-soname,`basename $@` -o $@ $^ $(CLASS_LIBS)
171 178  
172 179 $(BINDBG)/plugins/j3270@DLLEXT@: \
173 180 $(BINDBG)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ \
... ... @@ -175,10 +182,10 @@ $(BINDBG)/plugins/j3270@DLLEXT@: \
175 182  
176 183 @echo " LD `basename $@`"
177 184 @$(MKDIR) `dirname $@`
178   - @$(CXX) @SYSDLL_FLAGS@ @DBGRPATH@ $(LDFLAGS) -o $@ $^ $(CLASS_LIBS) $(PLUGIN_LIBS) -L$(BINDBG)@DLLDIR@ -ljni3270
  185 + $(CXX) @SYSDLL_FLAGS@ -Wl,--rpath,.bin/Debug@DLLDIR@ $(LDFLAGS) -Wl,-soname,`basename $@` -o $@ $^ $(CLASS_LIBS) $(PLUGIN_LIBS) -L$(BINDBG)@DLLDIR@ -ljni3270
179 186  
180 187 run: $(BINDBG)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ $(BINDIR)/java/testprogram.class
181   - @LD_LIBRARY_PATH=../../.bin/Debug/lib/ java -Djava.library.path=$(BINDBG)@DLLDIR@ -cp .bin/java/ testprogram
  188 + @LD_LIBRARY_PATH=../../.bin/Debug@DLLDIR@/ java -Djava.library.path=$(BINDBG)@DLLDIR@ -cp .bin/java/ testprogram
182 189  
183 190 #---[ Misc targets ]-----------------------------------------------------------
184 191  
... ...
src/java/clipboard.cc 0 → 100644
... ... @@ -0,0 +1,117 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
  19 + * Place, Suite 330, Boston, MA, 02111-1307, USA
  20 + *
  21 + * Este programa está nomeado como dialog.cc e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 + #include "jni3270.h"
  31 + #include "private.h"
  32 +
  33 +/*---[ Implement ]----------------------------------------------------------------------------------*/
  34 +
  35 +JNIEXPORT jint JNICALL Java_pw3270_terminal_set_1copy(JNIEnv *env, jobject obj, jstring j_str) {
  36 +
  37 + const char * str = env->GetStringUTFChars(j_str, 0);
  38 + jint rc = -1;
  39 +
  40 + try {
  41 +
  42 + rc = getHandle(env,obj)->set_copy(str);
  43 +
  44 + } catch(std::exception &e) {
  45 +
  46 + env->ReleaseStringUTFChars( j_str, str);
  47 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  48 + return -1;
  49 +
  50 + }
  51 +
  52 + env->ReleaseStringUTFChars( j_str, str);
  53 + return rc;
  54 +
  55 +}
  56 +
  57 +JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1copy(JNIEnv *env, jobject obj) {
  58 +
  59 + string str;
  60 +
  61 + try {
  62 +
  63 + str = getHandle(env,obj)->get_copy();
  64 +
  65 +
  66 + } catch(std::exception &e) {
  67 +
  68 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  69 +
  70 + }
  71 +
  72 + return env->NewStringUTF(str.c_str());
  73 +
  74 +
  75 +}
  76 +
  77 +JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1clipboard(JNIEnv *env, jobject obj) {
  78 +
  79 + string str;
  80 +
  81 + try {
  82 +
  83 + str = getHandle(env,obj)->get_clipboard();
  84 +
  85 +
  86 + } catch(std::exception &e) {
  87 +
  88 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  89 +
  90 + }
  91 +
  92 + return env->NewStringUTF(str.c_str());
  93 +
  94 +}
  95 +
  96 +JNIEXPORT jint JNICALL Java_pw3270_terminal_set_1clipboard(JNIEnv *env, jobject obj, jstring j_str) {
  97 +
  98 + const char * str = env->GetStringUTFChars(j_str, 0);
  99 + jint rc = -1;
  100 +
  101 + try {
  102 +
  103 + rc = getHandle(env,obj)->set_clipboard(str);
  104 +
  105 + } catch(std::exception &e) {
  106 +
  107 + env->ReleaseStringUTFChars( j_str, str);
  108 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  109 + return -1;
  110 +
  111 + }
  112 +
  113 + env->ReleaseStringUTFChars( j_str, str);
  114 + return rc;
  115 +
  116 +
  117 +}
... ...
src/java/dialog.cc 0 → 100644
... ... @@ -0,0 +1,91 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
  19 + * Place, Suite 330, Boston, MA, 02111-1307, USA
  20 + *
  21 + * Este programa está nomeado como dialog.cc e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 + #include "jni3270.h"
  31 + #include "private.h"
  32 +
  33 +/*---[ Implement ]----------------------------------------------------------------------------------*/
  34 +
  35 +JNIEXPORT jint JNICALL Java_pw3270_terminal_popup_1dialog(JNIEnv *env, jobject obj, jint id, jstring j_title, jstring j_message, jstring j_secondary) {
  36 +
  37 + const char * title = env->GetStringUTFChars(j_title, 0);
  38 + const char * message = env->GetStringUTFChars(j_message, 0);
  39 + const char * secondary = env->GetStringUTFChars(j_secondary, 0);
  40 + jint rc;
  41 +
  42 + try {
  43 +
  44 + rc = (jint) getHandle(env,obj)->popup_dialog((LIB3270_NOTIFY) id, title, message, secondary);
  45 +
  46 + } catch(std::exception &e) {
  47 +
  48 + env->ReleaseStringUTFChars( j_title, title);
  49 + env->ReleaseStringUTFChars( j_message, message);
  50 + env->ReleaseStringUTFChars( j_secondary, secondary);
  51 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  52 +
  53 + }
  54 +
  55 + env->ReleaseStringUTFChars( j_title, title);
  56 + env->ReleaseStringUTFChars( j_message, message);
  57 + env->ReleaseStringUTFChars( j_secondary, secondary);
  58 +
  59 + return rc;
  60 +
  61 +}
  62 +
  63 +JNIEXPORT jstring JNICALL Java_pw3270_terminal_file_1chooser_1dialog(JNIEnv *env, jobject obj, jint action, jstring j_title, jstring j_extension, jstring j_filename) {
  64 +
  65 + string str;
  66 + const char * title = env->GetStringUTFChars(j_title, 0);
  67 + const char * extension = env->GetStringUTFChars(j_extension, 0);
  68 + const char * filename = env->GetStringUTFChars(j_filename, 0);
  69 + jint rc;
  70 +
  71 + try {
  72 +
  73 + str = getHandle(env,obj)->file_chooser_dialog((int) action, title, extension, filename);
  74 +
  75 + } catch(std::exception &e) {
  76 +
  77 + env->ReleaseStringUTFChars( j_title, title);
  78 + env->ReleaseStringUTFChars( j_extension, extension);
  79 + env->ReleaseStringUTFChars( j_filename, filename);
  80 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  81 +
  82 + }
  83 +
  84 + env->ReleaseStringUTFChars( j_title, title);
  85 + env->ReleaseStringUTFChars( j_extension, extension);
  86 + env->ReleaseStringUTFChars( j_filename, filename);
  87 +
  88 + return env->NewStringUTF(str.c_str());
  89 +
  90 +
  91 +}
... ...
src/java/field.cc 0 → 100644
... ... @@ -0,0 +1,91 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
  19 + * Place, Suite 330, Boston, MA, 02111-1307, USA
  20 + *
  21 + * Este programa está nomeado como field.cc e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 + #include "jni3270.h"
  31 + #include "private.h"
  32 +
  33 +/*---[ Implement ]----------------------------------------------------------------------------------*/
  34 +
  35 +JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1field_1start (JNIEnv *env, jobject obj, jint baddr) {
  36 +
  37 + jint rc;
  38 +
  39 + try {
  40 +
  41 + rc = getHandle(env,obj)->get_field_start((int) baddr);
  42 +
  43 +
  44 + } catch(std::exception &e) {
  45 +
  46 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  47 +
  48 + }
  49 +
  50 + return rc;
  51 +
  52 +}
  53 +
  54 +JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1field_1len (JNIEnv *env, jobject obj, jint baddr) {
  55 +
  56 + jint rc;
  57 +
  58 + try {
  59 +
  60 + rc = getHandle(env,obj)->get_field_len((int) baddr);
  61 +
  62 +
  63 + } catch(std::exception &e) {
  64 +
  65 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  66 +
  67 + }
  68 +
  69 + return rc;
  70 +
  71 +}
  72 +
  73 +JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1next_1unprotected(JNIEnv *env, jobject obj, jint baddr) {
  74 +
  75 + jint rc;
  76 +
  77 + try {
  78 +
  79 + rc = getHandle(env,obj)->get_next_unprotected((int) baddr);
  80 +
  81 +
  82 + } catch(std::exception &e) {
  83 +
  84 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  85 +
  86 + }
  87 +
  88 + return rc;
  89 +
  90 +
  91 +}
... ...
src/java/getset.cc
... ... @@ -138,3 +138,43 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_input_1string(JNIEnv *env, jobject o
138 138  
139 139 }
140 140  
  141 +JNIEXPORT jboolean JNICALL Java_pw3270_terminal_is_1connected(JNIEnv *env, jobject obj) {
  142 +
  143 + jboolean rc = false;
  144 +
  145 + try {
  146 +
  147 + rc = getHandle(env,obj)->is_connected();
  148 +
  149 + } catch(std::exception &e) {
  150 +
  151 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  152 + return rc;
  153 +
  154 + }
  155 +
  156 +
  157 + return rc;
  158 +
  159 +}
  160 +
  161 +JNIEXPORT jboolean JNICALL Java_pw3270_terminal_is_1ready(JNIEnv *env, jobject obj) {
  162 +
  163 + jboolean rc = false;
  164 +
  165 + try {
  166 +
  167 + rc = getHandle(env,obj)->is_ready();
  168 +
  169 + } catch(std::exception &e) {
  170 +
  171 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  172 + return rc;
  173 +
  174 + }
  175 +
  176 +
  177 + return rc;
  178 +
  179 +}
  180 +
... ...
src/java/jni3270.cbp
... ... @@ -39,12 +39,20 @@
39 39 <Add option="-Wall" />
40 40 </Compiler>
41 41 <Unit filename="../../configure.ac" />
  42 + <Unit filename="../classlib/exception.cc" />
  43 + <Unit filename="../classlib/local.cc" />
  44 + <Unit filename="../classlib/remote.cc" />
  45 + <Unit filename="../classlib/session.cc" />
  46 + <Unit filename="../classlib/testprogram.cc" />
42 47 <Unit filename="../include/lib3270.h" />
43 48 <Unit filename="../include/pw3270/class.h" />
44 49 <Unit filename="Makefile.in" />
45 50 <Unit filename="actions.cc" />
  51 + <Unit filename="clipboard.cc" />
46 52 <Unit filename="connect.cc" />
47 53 <Unit filename="cursor.cc" />
  54 + <Unit filename="dialog.cc" />
  55 + <Unit filename="field.cc" />
48 56 <Unit filename="getset.cc" />
49 57 <Unit filename="info.cc" />
50 58 <Unit filename="jni3270.h" />
... ...
src/java/main.cc
... ... @@ -121,3 +121,23 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_wait_1for_1ready(JNIEnv *env, jobjec
121 121 return 0;
122 122  
123 123 }
  124 +
  125 +JNIEXPORT void JNICALL Java_pw3270_terminal_log(JNIEnv *env, jobject obj, jstring j_str) {
  126 +
  127 + const char * str = env->GetStringUTFChars(j_str, 0);
  128 +
  129 + try {
  130 +
  131 + getHandle(env,obj)->log("%s", str);
  132 +
  133 + } catch(std::exception &e) {
  134 +
  135 + env->ReleaseStringUTFChars( j_str, str);
  136 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  137 + return;
  138 +
  139 + }
  140 +
  141 + env->ReleaseStringUTFChars( j_str, str);
  142 +
  143 +}
... ...
src/java/plugin.cc
... ... @@ -313,7 +313,7 @@
313 313  
314 314 LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window)
315 315 {
316   - trace("%s",__FUNCTION__);
  316 + trace("JAVA: %s",__FUNCTION__);
317 317 #if GTK_CHECK_VERSION(2,32,0)
318 318 g_mutex_init(&mutex);
319 319 #endif // GTK_CHECK_VERSION
... ... @@ -326,7 +326,224 @@
326 326 #if GTK_CHECK_VERSION(2,32,0)
327 327 g_mutex_clear(&mutex);
328 328 #endif // GTK_CHECK_VERSION
329   - trace("%s",__FUNCTION__);
  329 + trace("JAVA: %s",__FUNCTION__);
330 330 return 0;
331 331 }
332 332  
  333 + void call_java_program(GtkAction *action, GtkWidget *widget, const gchar *filename)
  334 + {
  335 +
  336 +#if GTK_CHECK_VERSION(2,32,0)
  337 + if(!g_mutex_trylock(&mutex)) {
  338 +#else
  339 + if(!g_static_mutex_trylock(&mutex)) {
  340 +#endif // GTK_CHECK_VERSION
  341 +
  342 + GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  343 + GTK_DIALOG_DESTROY_WITH_PARENT,
  344 + GTK_MESSAGE_ERROR,
  345 + GTK_BUTTONS_CANCEL,
  346 + _( "Can't start %s program" ), "java" );
  347 +
  348 + gtk_window_set_title(GTK_WINDOW(dialog),_( "JVM busy" ));
  349 + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),_( "%s interpreter is busy" ), "java");
  350 +
  351 + gtk_dialog_run(GTK_DIALOG (dialog));
  352 + gtk_widget_destroy(dialog);
  353 +
  354 + return;
  355 + }
  356 +
  357 + v3270_set_script(widget,'J',TRUE);
  358 +
  359 + // Start JNI
  360 + JavaVMInitArgs vm_args;
  361 + JavaVMOption options[5];
  362 +
  363 + JavaVM * jvm = NULL;
  364 + JNIEnv * env = NULL;
  365 + jint rc = 0;
  366 +
  367 + memset(&vm_args,0,sizeof(vm_args));
  368 + memset(options,0,sizeof(options));
  369 +
  370 + vm_args.version = JNI_VERSION_1_2;
  371 + vm_args.nOptions = 0;
  372 + vm_args.options = options;
  373 +
  374 +#ifdef DEBUG
  375 + options[vm_args.nOptions++].optionString = g_strdup("-verbose");
  376 +#endif
  377 +
  378 + gchar * dirname = g_path_get_dirname(filename);
  379 +
  380 +#if defined( WIN32 )
  381 +
  382 + options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s",".");
  383 + options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.class.path=.;%s",dirname);
  384 +
  385 +#else
  386 +
  387 + options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s",JNIDIR);
  388 + options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.class.path=%s:%s",JARDIR,dirname);
  389 +
  390 +#endif // JNIDIR
  391 +
  392 + g_free(dirname);
  393 +
  394 + rc = JNI_CreateJavaVM(&jvm,(void **)&env,&vm_args);
  395 +
  396 + // Release options
  397 + for(size_t f=0;f<vm_args.nOptions;f++) {
  398 + trace("Releasing option %d: %s",f,options[f].optionString);
  399 + g_free(options[f].optionString);
  400 + }
  401 +
  402 + if(rc < 0) {
  403 +
  404 + GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  405 + GTK_DIALOG_DESTROY_WITH_PARENT,
  406 + GTK_MESSAGE_ERROR,
  407 + GTK_BUTTONS_CANCEL,
  408 + "%s", _( "Can't create java VM" ));
  409 +
  410 + gtk_window_set_title(GTK_WINDOW(dialog), _( "Script startup failure" ));
  411 + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),_( "The error code was %d" ), (int) rc);
  412 +
  413 + gtk_dialog_run(GTK_DIALOG (dialog));
  414 + gtk_widget_destroy(dialog);
  415 +
  416 + } else {
  417 +
  418 + gchar * classname = g_path_get_basename(filename);
  419 +
  420 + gchar * ptr = strchr(classname,'.');
  421 + if(ptr) {
  422 + *ptr = 0;
  423 + }
  424 +
  425 + jclass cls = env->FindClass(classname);
  426 +
  427 + if(cls == 0) {
  428 +
  429 + GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  430 + GTK_DIALOG_DESTROY_WITH_PARENT,
  431 + GTK_MESSAGE_ERROR,
  432 + GTK_BUTTONS_CANCEL,
  433 + _( "Can't find class %s" ), classname );
  434 +
  435 + gtk_window_set_title(GTK_WINDOW(dialog), _( "Java script failure" ));
  436 + if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)
  437 + gtk_main_quit();
  438 + gtk_widget_destroy(dialog);
  439 +
  440 + } else {
  441 +
  442 + jmethodID mid = env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V");
  443 +
  444 + if(mid == 0) {
  445 +
  446 + GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  447 + GTK_DIALOG_DESTROY_WITH_PARENT,
  448 + GTK_MESSAGE_ERROR,
  449 + GTK_BUTTONS_OK_CANCEL,
  450 + _( "Can't find class \"%s\"" ), classname );
  451 +
  452 + gtk_window_set_title(GTK_WINDOW(dialog), _( "Java script failure" ));
  453 + if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)
  454 + gtk_main_quit();
  455 + gtk_widget_destroy(dialog);
  456 +
  457 + } else {
  458 +
  459 + jobjectArray args = env->NewObjectArray(0, env->FindClass("java/lang/String"), env->NewStringUTF(""));
  460 +
  461 + env->CallStaticVoidMethod(cls, mid, args);
  462 +
  463 + }
  464 +
  465 + }
  466 +
  467 + g_free(classname);
  468 +
  469 +
  470 + jvm->DestroyJavaVM();
  471 + }
  472 +
  473 + // And release
  474 + v3270_set_script(widget,'J',FALSE);
  475 +
  476 +#if GTK_CHECK_VERSION(2,32,0)
  477 + g_mutex_unlock(&mutex);
  478 +#else
  479 + g_static_mutex_unlock(&mutex);
  480 +#endif // GTK_CHECK_VERSION
  481 +
  482 +
  483 + }
  484 +
  485 +
  486 +extern "C"
  487 +{
  488 + LIB3270_EXPORT void pw3270_action_java_activated(GtkAction *action, GtkWidget *widget)
  489 + {
  490 + gchar *filename = (gchar *) g_object_get_data(G_OBJECT(action),"src");
  491 +
  492 + lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p",gtk_action_get_name(action),widget);
  493 +
  494 +#if GTK_CHECK_VERSION(3,10,0)
  495 + g_simple_action_set_enabled(G_SIMPLE_ACTION(action),FALSE);
  496 +#else
  497 + gtk_action_set_sensitive(action,FALSE);
  498 +#endif // GTK(3,10)
  499 +
  500 + if(filename)
  501 + {
  502 + // Has filename, call it directly
  503 + call_java_program(action,widget,filename);
  504 + }
  505 + else
  506 + {
  507 + // No filename, ask user
  508 + static const struct _list
  509 + {
  510 + const gchar *name;
  511 + const gchar *pattern;
  512 + } list[] =
  513 + {
  514 + { N_( "Java class file" ), "*.class" }
  515 + };
  516 +
  517 + GtkFileFilter * filter[G_N_ELEMENTS(list)+1];
  518 + unsigned int f;
  519 +
  520 + memset(filter,0,sizeof(filter));
  521 +
  522 + for(f=0;f<G_N_ELEMENTS(list);f++)
  523 + {
  524 + filter[f] = gtk_file_filter_new();
  525 + gtk_file_filter_set_name(filter[f],gettext(list[f].name));
  526 + gtk_file_filter_add_pattern(filter[f],list[f].pattern);
  527 + }
  528 +
  529 + filename = pw3270_get_filename(widget,"java","script",filter,_( "Select script to run" ));
  530 +
  531 + if(filename)
  532 + {
  533 + call_java_program(action,widget,filename);
  534 + g_free(filename);
  535 + }
  536 +
  537 +
  538 + }
  539 +
  540 +#if GTK_CHECK_VERSION(3,10,0)
  541 + g_simple_action_set_enabled(G_SIMPLE_ACTION(action),TRUE);
  542 +#else
  543 + gtk_action_set_sensitive(action,TRUE);
  544 +#endif // GTK(3,10)
  545 +
  546 + }
  547 +
  548 +}
  549 +
... ...
src/java/terminal.java
... ... @@ -251,6 +251,103 @@ public class terminal
251 251 }
252 252  
253 253 /**
  254 + * Get the field start address.
  255 + *
  256 + * @param baddr address of the field.
  257 + *
  258 + * @return Address of current field start.
  259 + *
  260 + */
  261 + public native int get_field_start(int baddr);
  262 +
  263 + /**
  264 + * Get the current field start address.
  265 + *
  266 + * @return Current field start address.
  267 + *
  268 + */
  269 + public int get_field_start() {
  270 + return get_field_start(-1);
  271 + }
  272 +
  273 + /**
  274 + * Get the field length.
  275 + *
  276 + * @param baddr Address of the field.
  277 + *
  278 + * @return Field length.
  279 + *
  280 + */
  281 + public native int get_field_len(int baddr);
  282 +
  283 + /**
  284 + * Get the current field length.
  285 + *
  286 + * @return Current field length.
  287 + *
  288 + */
  289 + public int get_field_len() {
  290 + return get_field_len(-1);
  291 + }
  292 +
  293 + /**
  294 + * Get next field address.
  295 + *
  296 + * @param Field address.
  297 + *
  298 + * @return Address of the next field.
  299 + *
  300 + */
  301 + public native int get_next_unprotected(int baddr);
  302 +
  303 + /**
  304 + * Get next field address.
  305 + *
  306 + * @return Address of the next field.
  307 + *
  308 + */
  309 + public int get_next_unprotected() {
  310 + return get_next_unprotected(-1);
  311 + }
  312 +
  313 + /**
  314 + * Open popup dialog.
  315 + *
  316 + * @param id Dialog type.
  317 + * @param title Window title.
  318 + * @param message Dialog message.
  319 + * @param secondary Dialog secondary text.
  320 + *
  321 + * @return reserved.
  322 + *
  323 + */
  324 + public native int popup_dialog(int id, String title, String message, String secondary);
  325 +
  326 + /**
  327 + * File selection dialog.
  328 + *
  329 + * @param action Dialog action.
  330 + * @param title Window title.
  331 + * @param extension File extension.
  332 + * @param filename Default file name;
  333 + *
  334 + * @return Selected file name.
  335 + *
  336 + */
  337 + public native String file_chooser_dialog(int action, String title, String extension, String filename);
  338 +
  339 + public native int set_copy(String text);
  340 + public native String get_copy();
  341 +
  342 + public native String get_clipboard();
  343 + public native int set_clipboard(String text);
  344 +
  345 + public native boolean is_connected();
  346 + public native boolean is_ready();
  347 +
  348 + public native void log(String msg);
  349 +
  350 + /**
254 351 * Creates a tn3270 terminal associated with a
255 352 * pw3270 window.
256 353 *
... ...
src/java/testprogram.java
... ... @@ -38,6 +38,9 @@ public class testprogram
38 38 System.err.println("Begin");
39 39  
40 40 terminal host = new terminal();
  41 +
  42 + host.log("Sample message");
  43 +
41 44 System.err.println("pw3270 version " + host.get_version() + " revision " + host.get_revision() + " encoding " + host.get_encoding());
42 45  
43 46  
... ...
src/pw3270/Makefile.in
... ... @@ -148,7 +148,7 @@ $(BINDBG)/$(PACKAGE_TARNAME)$(EXEEXT): $(LIBDBG)/@DLLPREFIX@$(PACKAGE_TARNAME)@D
148 148 $(foreach SRC, $(basename $(APP_SOURCES)), $(OBJDBG)/$(SRC)$(OBJEXT))
149 149 @echo " CCLD `basename $@`"
150 150 @$(MKDIR) `dirname $@`
151   - $(LD) @LDARCH@ @DBGRPATH@ -o $@ $(foreach SRC, $(basename $(APP_SOURCES)), $(OBJDBG)/$(SRC)$(OBJEXT)) $(LIBS) $(LIB3270_LIBS) -l$(PACKAGE_TARNAME)
  151 + @$(LD) @LDARCH@ @DBGRPATH@ -o $@ $(foreach SRC, $(basename $(APP_SOURCES)), $(OBJDBG)/$(SRC)$(OBJEXT)) $(LIBS) $(LIB3270_LIBS) -l$(PACKAGE_TARNAME)
152 152  
153 153 $(LIBDBG)/@DLLPREFIX@$(PACKAGE_TARNAME)@DLLEXT@: $(LIBDBG)/@DLLPREFIX@$(PACKAGE_TARNAME)@DLLEXT@.@VERSION@
154 154 @rm -f $@
... ...
ui/80java.xml 0 → 100644
... ... @@ -0,0 +1,42 @@
  1 +<!-----------------------------------------------------------------------------
  2 +
  3 + Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  4 + (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  5 + aplicativos mainframe. Registro no INPI sob o nome G3270.
  6 +
  7 + Copyright (C) <2008> <Banco do Brasil S.A.>
  8 +
  9 + Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  10 + os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  11 + Free Software Foundation.
  12 +
  13 + Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  14 + GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  15 + A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  16 + obter mais detalhes.
  17 +
  18 + Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  19 + programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  20 + St, Fifth Floor, Boston, MA 02110-1301 USA
  21 +
  22 +
  23 + Contatos:
  24 +
  25 + perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + licinio@bb.com.br (Licínio Luis Branco)
  28 + kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 +
  30 +------------------------------------------------------------------------------>
  31 +
  32 +<ui>
  33 + <menubar name='topmenu' topmenu='yes'>
  34 + <menu name='FileMenu' label='_File' />
  35 + <menu name='EditMenu' label='_Edit' />
  36 + <menu name='View' label='_View' />
  37 + <menu name='ScriptsMenu' label='Scripts' visible='yes' >
  38 + <menuitem action='java' label='External Java Application'/>
  39 + </menu>
  40 + </menubar>
  41 +</ui>
  42 +
... ...