diff --git a/src/java/Makefile.in b/src/java/Makefile.in index f899758..737a9ac 100644 --- a/src/java/Makefile.in +++ b/src/java/Makefile.in @@ -26,6 +26,7 @@ PACKAGE_NAME=@PACKAGE_NAME@ SOURCES=main.cc info.cc connect.cc getset.cc cursor.cc keyboard.cc actions.cc +PLUGIN_SRC=plugin.cc #---[ Paths ]------------------------------------------------------------------ @@ -77,6 +78,8 @@ include $(CLASSLIBDIR)/class.mak #---[ Build options ]---------------------------------------------------------- CXXFLAGS=@CXXFLAGS@ @DLL_CFLAGS@ @JNI_CPPFLAGS@ -I../include +PLUGIN_CFLAGS=@CXXFLAGS@ @DLL_CFLAGS@ @JNI_CPPFLAGS@ @GTK_CFLAGS@ @GTKMAC_CFLAGS@ -I../include +PLUGINS_LIBS=@GTK_LIBS@ @GTKMAC_LIBS@ #---[ Rules ]------------------------------------------------------------------ @@ -85,11 +88,21 @@ $(OBJDBG)/%.o: %.cc Makefile private.h jni3270.h @mkdir -p `dirname $@` @$(CXX) -DDEBUG=1 $(CXXFLAGS) -o $@ -c $< +$(OBJDBG)/j3270/%.o: %.cc Makefile private.h + @echo " CC `basename $@`" + @mkdir -p `dirname $@` + @$(CXX) -DDEBUG=1 $(PLUGIN_CFLAGS) -o $@ -c $< + $(OBJRLS)/%.o: %.cc Makefile private.h jni3270.h @echo " CC `basename $@`" @mkdir -p `dirname $@` @$(CXX) -DNDEBUG=1 $(CXXFLAGS) -o $@ -c $< +$(OBJRLS)/j3270/%.o: %.cc Makefile private.h + @echo " CC `basename $@`" + @mkdir -p `dirname $@` + @$(CXX) -DNDEBUG=1 $(PLUGIN_CFLAGS) -o $@ -c $< + $(BINDIR)/java/%.class: %.java $(BINDIR)/java/$(PACKAGE_NAME)/terminal.class @echo $< ... @mkdir -p `dirname $@` @@ -116,7 +129,7 @@ all: $(BINRLS)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ Release: $(BINRLS)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ -zip: jni3270.zip +zip: jni3270.zip jni3270.zip: $(BINRLS)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ $(BINRLS)/$(PACKAGE_NAME).jar testprogram.java doc @rm -fr .tmp.zip @@ -133,19 +146,36 @@ $(BINRLS)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@: \ @echo " LD `basename $@`" @$(MKDIR) `dirname $@` - @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) $(OO_LDFLAGS) -o $@ $^ $(CLASS_LIBS) + @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) -o $@ $^ $(CLASS_LIBS) +$(BINRLS)/plugins/j3270@DLLEXT@: \ + $(foreach SRC, $(basename $(PLUGIN_SRC)), $(OBJRLS)/j3270/$(SRC)@OBJEXT@) + + @echo " LD `basename $@`" + @$(MKDIR) `dirname $@` + @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) -o $@ $^ $(CLASS_LIBS) $(PLUGIN_LIBS) -ljni3270 #---[ Debug targets ]---------------------------------------------------------- -Debug: $(BINDBG)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ $(BINDIR)/java/testprogram.class +Debug: $(BINDBG)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ \ + $(BINDIR)/java/testprogram.class \ + $(BINDBG)/plugins/j3270@DLLEXT@ + +$(BINDBG)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@: \ + $(foreach SRC, $(basename $(SOURCES)), $(OBJDBG)/$(SRC)@OBJEXT@) \ + $(CLASS_DEBUG_OBJECTS) -$(BINDBG)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@: $(foreach SRC, $(basename $(SOURCES)), $(OBJDBG)/$(SRC)@OBJEXT@) \ - $(CLASS_DEBUG_OBJECTS) @echo " LD `basename $@`" @$(MKDIR) `dirname $@` - @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) $(OO_LDFLAGS) -o $@ $^ $(CLASS_LIBS) + @$(CXX) @SYSDLL_FLAGS@ $(LDFLAGS) -o $@ $^ $(CLASS_LIBS) +$(BINDBG)/plugins/j3270@DLLEXT@: \ + $(BINDBG)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ \ + $(foreach SRC, $(basename $(PLUGIN_SRC)), $(OBJDBG)/j3270/$(SRC)@OBJEXT@) + + @echo " LD `basename $@`" + @$(MKDIR) `dirname $@` + @$(CXX) @SYSDLL_FLAGS@ @DBGRPATH@ $(LDFLAGS) -o $@ $^ $(CLASS_LIBS) $(PLUGIN_LIBS) -L$(BINDBG)@DLLDIR@ -ljni3270 run: $(BINDBG)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ $(BINDIR)/java/testprogram.class @LD_LIBRARY_PATH=../../.bin/Debug/lib/ java -Djava.library.path=$(BINDBG)@DLLDIR@ -cp .bin/java/ testprogram diff --git a/src/java/actions.cc b/src/java/actions.cc index 162a574..65880cd 100644 --- a/src/java/actions.cc +++ b/src/java/actions.cc @@ -27,6 +27,7 @@ * */ + #include "jni3270.h" #include "private.h" /*---[ Implement ]----------------------------------------------------------------------------------*/ diff --git a/src/java/connect.cc b/src/java/connect.cc index cfda4a6..b55d182 100644 --- a/src/java/connect.cc +++ b/src/java/connect.cc @@ -27,6 +27,7 @@ * */ + #include "jni3270.h" #include "private.h" /*---[ Implement ]----------------------------------------------------------------------------------*/ diff --git a/src/java/cursor.cc b/src/java/cursor.cc index f31161f..272881e 100644 --- a/src/java/cursor.cc +++ b/src/java/cursor.cc @@ -27,6 +27,7 @@ * */ + #include "jni3270.h" #include "private.h" /*---[ Implement ]----------------------------------------------------------------------------------*/ diff --git a/src/java/getset.cc b/src/java/getset.cc index 4f665f2..a6e9765 100644 --- a/src/java/getset.cc +++ b/src/java/getset.cc @@ -27,6 +27,7 @@ * */ + #include "jni3270.h" #include "private.h" /*---[ Implement ]----------------------------------------------------------------------------------*/ diff --git a/src/java/info.cc b/src/java/info.cc index ff2b12c..901e442 100644 --- a/src/java/info.cc +++ b/src/java/info.cc @@ -27,6 +27,7 @@ * */ + #include "jni3270.h" #include "private.h" diff --git a/src/java/jni3270.cbp b/src/java/jni3270.cbp index 0bc84a8..b14e93d 100644 --- a/src/java/jni3270.cbp +++ b/src/java/jni3270.cbp @@ -50,6 +50,7 @@ + diff --git a/src/java/keyboard.cc b/src/java/keyboard.cc index 69d1981..98474a1 100644 --- a/src/java/keyboard.cc +++ b/src/java/keyboard.cc @@ -27,6 +27,7 @@ * */ + #include "jni3270.h" #include "private.h" /*---[ Implement ]----------------------------------------------------------------------------------*/ diff --git a/src/java/main.cc b/src/java/main.cc index 1b8f987..b8c8e42 100644 --- a/src/java/main.cc +++ b/src/java/main.cc @@ -27,6 +27,7 @@ * */ + #include "jni3270.h" #include "private.h" /*---[ Implement ]----------------------------------------------------------------------------------*/ diff --git a/src/java/plugin.cc b/src/java/plugin.cc new file mode 100644 index 0000000..f8301e0 --- /dev/null +++ b/src/java/plugin.cc @@ -0,0 +1,332 @@ +/* + * "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 plugin.cc e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + + #include "private.h" + + #include + #include + #include + + #include + #include + #include + #include + #include + #include + #include + #include + + +/*--[ Globals ]--------------------------------------------------------------------------------------*/ + +#if GTK_CHECK_VERSION(2,32,0) + static GMutex mutex; +#else + static GStaticMutex mutex = G_STATIC_MUTEX_INIT; +#endif // GTK_CHECK_VERSION + +/*--[ Plugin session object ]--------------------------------------------------------------------------------*/ + + class plugin : public PW3270_NAMESPACE::session + { + private: + H3270 * hSession; + + public: + plugin(H3270 *hSession) : PW3270_NAMESPACE::session() { + this->hSession = hSession; + } + + virtual ~plugin() { + trace("%s",__FUNCTION__); + } + + const string get_version(void) { + return string(lib3270_get_version()); + } + + LIB3270_CSTATE get_cstate(void) { + return lib3270_get_connection_state(hSession); + } + + int disconnect(void) { + lib3270_disconnect(hSession); + return 0; + } + + int connect(void) { + return lib3270_connect(hSession,0); + } + + bool is_connected(void) { + return lib3270_is_connected(hSession); + } + + int iterate(bool wait) { + if(!lib3270_is_connected(hSession)) + return ENOTCONN; + + lib3270_main_iterate(hSession,wait); + + return 0; + + } + + int wait(int seconds) { + return lib3270_wait(hSession,seconds); + } + + int wait_for_ready(int seconds) { + return lib3270_wait_for_ready(hSession,seconds); + } + + bool is_ready(void) { + return lib3270_is_ready(hSession) != 0; + } + + void logva(const char *fmt, va_list args) { + lib3270_write_va_log(hSession,"JAVA",fmt,args); + } + + string get_text(int baddr, size_t len) { + + string rc; + char * ptr = lib3270_get_text(hSession,baddr,len); + + if(ptr) + { + rc.assign(ptr); + lib3270_free(ptr); + } + + return rc; + } + + string get_text_at(int row, int col, size_t sz) { + + string rc; + char * ptr = lib3270_get_text_at(hSession,row,col,(int) sz); + + if(ptr) + { + rc.assign(ptr); + lib3270_free(ptr); + } + + return rc; + + } + + int cmp_text_at(int row, int col, const char *text) { + return lib3270_cmp_text_at(hSession,row,col,text); + } + + int set_text_at(int row, int col, const char *str) { + return lib3270_set_text_at(hSession,row,col,(const unsigned char *) str); + } + + int set_cursor_position(int row, int col) { + return lib3270_set_cursor_position(hSession,row,col); + } + + int set_cursor_addr(int addr) { + return lib3270_set_cursor_address(hSession,addr); + } + + int get_cursor_addr(void) { + return lib3270_get_cursor_address(hSession); + } + + int emulate_input(const char *str) { + return lib3270_emulate_input(hSession, str, -1, 1); + } + + int set_toggle(LIB3270_TOGGLE ix, bool value) { + return lib3270_set_toggle(hSession,ix,(int) value); + } + + int enter(void) { + return lib3270_enter(hSession); + } + + int pfkey(int key) { + return lib3270_pfkey(hSession,key); + } + + int pakey(int key) { + return lib3270_pakey(hSession,key); + } + + int erase_eof(void) { + return lib3270_eraseeof(hSession); + } + + int print(void) { + return lib3270_print(hSession); + } + + int get_field_start(int baddr = -1) { + return lib3270_get_field_start(hSession,baddr); + } + + int get_field_len(int baddr = -1) { + return lib3270_get_field_len(hSession,baddr); + } + + int get_next_unprotected(int baddr = -1) { + return lib3270_get_next_unprotected(hSession,baddr); + } + + int set_copy(const char *text) { + v3270_set_copy(GTK_WIDGET(lib3270_get_user_data(hSession)),text); + return 0; + } + + string get_copy(void) { + + string rc; + gchar * ptr = v3270_get_copy(GTK_WIDGET(lib3270_get_user_data(hSession))); + + if(ptr) + { + rc.assign(ptr); + g_free(ptr); + } + + return rc; + + } + + string get_clipboard(void) { + + string rc; + gchar * ptr = gtk_clipboard_wait_for_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD)); + + if(ptr) + { + rc.assign(ptr); + g_free(ptr); + } + + return rc; + + } + + int set_clipboard(const char *text) { + gtk_clipboard_set_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD),(gchar *) text, -1); + return 0; + } + + void free(void *ptr) { + g_free(ptr); + } + + int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...) { + va_list args; + va_start(args, fmt); + lib3270_popup_va(hSession, id, title, message, fmt, args); + va_end(args); + return 0; + } + + string file_chooser_dialog(GtkFileChooserAction action, const char *title, const char *extension, const char *filename) { + string rc; + gchar * ptr = pw3270_file_chooser(action, "java", title, filename, extension); + + if(ptr) + { + rc.assign((char *) ptr); + g_free(ptr); + } + + return rc; + } + + int set_host_charset(const char *charset) { + return lib3270_set_host_charset(hSession,charset); + } + + string get_host_charset(void) { + return string(lib3270_get_host_charset(hSession)); + } + + string get_display_charset(void) { + return string(lib3270_get_display_charset(hSession)); + } + + const char * asc2ebc(unsigned char *str, int sz = -1) { + return lib3270_asc2ebc(hSession,str,sz); + } + + const char * ebc2asc(unsigned char *str, int sz = -1) { + return lib3270_ebc2asc(hSession,str,sz); + } + + int set_url(const char *uri) { + return lib3270_set_url(hSession,uri) != NULL ? 1 : 0; + } + + int file_transfer(LIB3270_FT_OPTION options, const gchar *local, const gchar *remote, int lrecl = 0, int blksize = 0, int primspace = 0, int secspace = 0, int dft = 4096) { + return v3270_transfer_file(v3270_get_default_widget(),options,local,remote,lrecl,blksize,primspace,secspace,dft); + } + + int quit(void) { + gtk_main_quit(); + return 0; + } + + }; + + +/*---[ Implement ]----------------------------------------------------------------------------------*/ + + static session * factory(const char *name) + { + return new plugin(lib3270_get_default_session_handle()); + } + + LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window) + { + trace("%s",__FUNCTION__); +#if GTK_CHECK_VERSION(2,32,0) + g_mutex_init(&mutex); +#endif // GTK_CHECK_VERSION + set_java_session_factory(factory); + return 0; + } + + LIB3270_EXPORT int pw3270_plugin_stop(GtkWidget *window) + { +#if GTK_CHECK_VERSION(2,32,0) + g_mutex_clear(&mutex); +#endif // GTK_CHECK_VERSION + trace("%s",__FUNCTION__); + return 0; + } + diff --git a/src/java/private.h b/src/java/private.h index a8e9258..10f93c3 100644 --- a/src/java/private.h +++ b/src/java/private.h @@ -34,7 +34,7 @@ #define PRIVATE_H_INCLUDED - #include "jni3270.h" + #include #include using namespace PW3270_NAMESPACE; -- libgit2 0.21.2