From 958b8c4867e5a0448a5427b5afcd715c8e9ac524 Mon Sep 17 00:00:00 2001 From: PerryWerneck Date: Fri, 16 Dec 2016 20:41:20 -0200 Subject: [PATCH] Reimplementando geração da jni num projeto separado. --- .gitignore | 1 + configure.ac | 1 + src/jni/Makefile.in | 42 ++++++++++++++++++++++++++++++++++++------ src/terminal.java | 479 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 517 insertions(+), 6 deletions(-) create mode 100644 src/terminal.java diff --git a/.gitignore b/.gitignore index 1642194..a5adc80 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ ChangeLog revision revision.m4 *.ini +jni3270.h diff --git a/configure.ac b/configure.ac index 0f4fc6c..8aa8c9a 100644 --- a/configure.ac +++ b/configure.ac @@ -427,6 +427,7 @@ dnl Configure which files to generate. dnl --------------------------------------------------------------------------- dnl AC_CONFIG_FILES(Makefile) +AC_CONFIG_FILES(src/jni/Makefile) dnl --------------------------------------------------------------------------- dnl Output the generated config.status script. diff --git a/src/jni/Makefile.in b/src/jni/Makefile.in index 5d695d6..11959c8 100644 --- a/src/jni/Makefile.in +++ b/src/jni/Makefile.in @@ -63,8 +63,9 @@ SHELL=@SHELL@ MKDIR=@MKDIR_P@ CXX=@CXX@ -CC=@CC@ LD=@CXX@ +JAVAH=@JAVAH@ +JAVAC=@JAVAC@ LIBS=-lpw3270cpp @LIBS@ @LIBICONV@ CXXFLAGS=@CXXFLAGS@ @JNI_CPPFLAGS@ @@ -72,26 +73,55 @@ LDFLAGS=@LDFLAGS@ #---[ Rules ]---------------------------------------------------------------------------- -DEPENDS=*.h Makefile +DEPENDS=../include/*.h Makefile $(OBJDBG)/%.o: \ %.cc \ + jni3270.h \ $(DEPENDS) @echo $< ... @$(MKDIR) `dirname $@` @$(CXX) $(CFLAGS) -fstack-check -DDEBUG=1 \ - -DBUILD_DATE=`date +"0x%Y%m%d"`\ - -g -o $@ -c $< + -DBUILD_DATE=`date +"0x%Y%m%d"`\ + -g -o $@ -c $< $(OBJRLS)/%.o: \ %.cc \ + jni3270.h \ $(DEPENDS) @echo $< ... @$(MKDIR) `dirname $@` @$(CXX) $(CFLAGS) -DNDEBUG=1 \ - -DBUILD_DATE=`date +"0x%Y%m%d"` \ - -o $@ -c $< + -DBUILD_DATE=`date +"0x%Y%m%d"` \ + -o $@ -c $< +$(BINDIR)/java/pw3270/%.class: \ + ../%.java + + @echo $< ... + @mkdir -p `dirname $@` + @$(JAVAC) -encoding utf-8 -d $(BINDIR)/java $^ + + +jni3270.h: \ + $(BINDIR)/java/pw3270/terminal.class + + @echo $< ... + @mkdir -p `dirname $@` + @$(JAVAH) -o $@ -classpath $(BINDIR)/java pw3270.terminal + + +#---[ Debug Targets ]-------------------------------------------------------------------- + +Debug: \ + $(BINDBG)/$(LIBNAME) + +$(BINDBG)/$(LIBNAME): \ + $(foreach SRC, $(basename $(SOURCES)), $(OBJDBG)/$(SRC).o) + + @echo $(basename $@) ... + @$(MKDIR) `dirname $@` + @$(LD) -shared -Wl,-soname,$(notdir $@) $(LDFLAGS) -o $@ $^ $(LIBS) diff --git a/src/terminal.java b/src/terminal.java new file mode 100644 index 0000000..8f6cf4c --- /dev/null +++ b/src/terminal.java @@ -0,0 +1,479 @@ +/* + * "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 terminal.java e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + +package pw3270; + +public class terminal +{ + // Is native library loaded? + private static boolean loaded = false; + + // lib3270's session handle + private long nativeHandle; + + // Init/Deinit + private native int init(); + private native int init(String id); + private native int deinit(); + + /** + * Wait for an specified amount of time. + *

+ * Wait for the specified time keeping the main loop active. + * + * @param seconds Number of seconds to wait. + * + */ + public native int wait(int seconds); + + /** + * Wait for terminal negociation. + *

+ * Wait on a loop until the terminal contents are + * ready for reading. + * + * @param seconds Maximum time (in seconds) to wait for. + * + * @return 0 for success, error code if not. + * + */ + public native int wait_for_ready(int seconds); + + /** + * Wait for text at defined position + * + * @param row Row for text to compare. + * @param col Column for text to compare. + * @param text String to compare. + * @param seconds Maximum time (in seconds) to wait for. + * + * @return 0 for success, error code if not. + * + */ + public native int wait_for_string_at(int row, int col, String text, int seconds); + + /** + * Get the current lib3270 version. + * + * @return String with the current lib3270 version. + * + */ + public native String get_version(); + + /** + * Get the current lib3270 revision. + * + * @return String with the current lib3270 revision. + * + */ + public native String get_revision(); + + /** + * Get the current lib3270 encoding. + * + * @return String with the current lib3270 encoding (ISO-8859-1). + * + */ + public native String get_encoding(); + + // Get/Set/Text with charset translation + + /** + * Get terminal contents starting at desired address. + * + * @param baddr Address of the beginning of the string. + * @param len Length of the string. + * + * @return Terminal contents with "len" bytes starting at "baddr" position. + * + */ + public native String get_string(int baddr, int len); + + /** + * Get terminal contents starting at row, col. + * + * @param row Row of the text. + * @param col Column of the text. + * @param sz Size to read. + * + * @return Contents of terminal at row, col with sz bytes. + * + */ + public native String get_string_at(int row, int col, int sz); + + /** + * Set terminal contents at position. + * + * @param row Row for starting of change. + * @param col Column for starting of change. + * @param str Text to set. + * + * @return 0 if ok, error code if not. + * + */ + public native int set_string_at(int row, int col, String str); + + /** + * Compare terminal contents. + * + * @param row Row for text to compare. + * @param col Column for text to compare. + * @param text String to compare. + * + * @return result of strcmp() from text and terminal contents. + * + */ + public native int cmp_string_at(int row, int col, String text); + + + public native int input_string(String str); + + // Cursor management + + /** + * Move cursor to selected position. + * + * @param row Row of the new cursor position. + * @param col Column of the new cursor position. + * + * @return Address of current cursor position. + * + */ + public native int set_cursor_position(int row, int col); + + /** + * Set cursor offset in the terminal buffer. + * + * @param addr New cursor offset. + * + * @return Original cursor offset. + * + */ + public native int set_cursor_addr(int addr); + + /** + * Get cursor offset + * + * @return Current cursor offset. + * + */ + public native int get_cursor_addr(); + + // Keyboard actions + + /** + * Send an "ENTER" action. + * + * @return reserved. + * + */ + public native int enter(); + + /** + * Send a pfkey to host. + * + * @param key PFkey number. + * + * @return reserved. + * + */ + public native int pfkey(int key); + + /** + * Send a pakey to host. + * + * @param key PFkey number. + * + * @return reserved. + * + */ + public native int pakey(int key); + + // Actions + + /** + * quit remote pw3270 window. + *

+ * Only valid if connected to a remote window + * + * @return reserved. + * + */ + public native int quit(); + + public native int erase(); + public native int erase_eol(); + public native int erase_input(); + + + /** + * Erase from cursor position until the end of the field. + * + * @return reserved. + * + */ + public native int erase_eof(); + + + /** + * Open print dialog. + *

+ * Only valid if connected to a remote window + * + * @return reserved + * + */ + public native int print(); + + // Connect/Disconnect + + /** + * Connect to 3270 host. + *

+ * Connect to the 3270 host + *

+ * URI formats: + *

+ * + * @param host Host URI. + * @param seconds How many seconds to wait for a connection. + * + * @return 0 if ok, error code if not. + * + */ + public native int connect(String host, int seconds); + + /** + * Disconnect from host. + * + * @return 0 if ok, error code if not. + * + */ + public native int disconnect(); + + /** + * Load native module. + * + */ + private synchronized void load() { + + if(!loaded) { + System.loadLibrary("jni3270"); + loaded = true; + } + + } + + /** + * Creates a tn3270 terminal without associating it + * with any pw3270 window. + * + */ + public terminal() { + + load(); + init(); + + } + + /** + * Get the field start address. + * + * @param baddr address of the field. + * + * @return Address of current field start. + * + */ + public native int get_field_start(int baddr); + + /** + * Get the current field start address. + * + * @return Current field start address. + * + */ + public int get_field_start() { + return get_field_start(-1); + } + + /** + * Get the field length. + * + * @param baddr Address of the field. + * + * @return Field length. + * + */ + public native int get_field_len(int baddr); + + /** + * Get the current field length. + * + * @return Current field length. + * + */ + public int get_field_len() { + return get_field_len(-1); + } + + /** + * Get next field address from informed position. + * + * @param baddr Field address. + * + * @return Address of the next field. + * + */ + public native int get_next_unprotected(int baddr); + + /** + * Check if the address is protected. + * + * @param baddr Field address. + * + * @return Protect state. + * + */ + public native int get_is_protected(int baddr); + + /** + * Check if the address is protected. + * + * @param row Screen row. + * @param col Screen col. + * + * @return Protect state. + * + */ + public native int get_is_protected_at(int row, int col); + + /** + * Get next field address. + * + * @return Address of the next field. + * + */ + public int get_next_unprotected() { + return get_next_unprotected(-1); + } + + /** + * Open popup dialog. + * + * @param id Dialog type. + * @param title Window title. + * @param message Dialog message. + * @param secondary Dialog secondary text. + * + * @return reserved. + * + */ + public native int popup_dialog(int id, String title, String message, String secondary); + + /** + * Launch a lib3270 action by name. + * + * @param name Name of the action to fire. + * + * @return Return code of the action call. + * + */ + public native int action(String name); + + /** + * File selection dialog. + * + * @param action Dialog action. + * @param title Window title. + * @param extension File extension. + * @param filename Default file name; + * + * @return Selected file name. + * + */ + public native String file_chooser_dialog(int action, String title, String extension, String filename); + + public native int set_copy(String text); + public native String get_copy(); + + public native String get_clipboard(); + public native int set_clipboard(String text); + + public native boolean is_connected(); + public native boolean is_ready(); + + /** + * Set unlock delay in milliseconds. + * + * Overrides the default value for the unlock delay (the delay between the host unlocking the + * keyboard and lib3270 actually performing the unlock). + * + * The value is in milliseconds; use 0 to turn off the delay completely. + * + * @param ms Delay in milliseconds. + * + */ + public native void set_unlock_delay(int ms); + + public native void log(String msg); + + /** + * Get Screen contents. + * + */ + public native String toString(); + + /** + * Get connection SSL state + * + * @return State of SSL connection (0 = Unsafe, 1 = Valid CA, 2 = Invalid CA or self-signed, 3 = Negotiating, 4 = Undefined) + * + */ + public native int get_secure(); + + /** + * Creates a tn3270 terminal associated with a + * pw3270 window. + * + * @param id String identifying the target window ("pw3270:a") or "" to run without window. + * + */ + public terminal(String id) { + load(); + init(id); + } + + protected void finalize( ) throws Throwable { + deinit(); + } + +}; -- libgit2 0.21.2