Commit 70fe145b4cdfa3f054600e78b41857228d748cf6
1 parent
9cc790e6
Exists in
master
and in
5 other branches
Incluindo plugin java
Showing
15 changed files
with
861 additions
and
11 deletions
Show diff stats
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 "$app_cv_java" = "yes" ; 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 | ... | ... |
| ... | ... | @@ -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 | +} | ... | ... |
| ... | ... | @@ -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 | +} | ... | ... |
| ... | ... | @@ -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 $@ | ... | ... |
| ... | ... | @@ -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 | + | ... | ... |