From b9f0d78eeed5c1df18aa6bedb984cfa6df46e212 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Fri, 5 Jul 2013 20:12:48 +0000 Subject: [PATCH] Atualizando classe de referência --- src/classlib/Makefile | 2 +- src/classlib/exception.cc | 2 +- src/classlib/local.cc | 16 +++++++++++++++- src/classlib/pw3270class.h | 164 -------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/classlib/remote.cc | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------- src/classlib/session.cc | 2 +- src/classlib/testprogram.cc | 2 +- src/include/pw3270/class.h | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/plugins/rx3270/remote.cc | 2 +- 9 files changed, 271 insertions(+), 191 deletions(-) delete mode 100644 src/classlib/pw3270class.h create mode 100644 src/include/pw3270/class.h diff --git a/src/classlib/Makefile b/src/classlib/Makefile index 8ddae97..d8f8eea 100644 --- a/src/classlib/Makefile +++ b/src/classlib/Makefile @@ -57,7 +57,7 @@ DEBUG_CFLAGS=-DDEBUG=1 -g -Wall CXX=g++ LD=g++ -DEPENDS=*.h ../include/*.h ../include/lib3270/*.h Makefile +DEPENDS=../include/*.h ../include/lib3270/*.h ../include/pw3270/*.h Makefile $(OBJDBG)/%.o: %.cc $(DEPENDS) @echo " CC `basename $@`" diff --git a/src/classlib/exception.cc b/src/classlib/exception.cc index 000c876..bb7b611 100644 --- a/src/classlib/exception.cc +++ b/src/classlib/exception.cc @@ -30,7 +30,7 @@ #include #include - #include "pw3270class.h" + #include /*--[ Implement ]--------------------------------------------------------------------------------------------------*/ diff --git a/src/classlib/local.cc b/src/classlib/local.cc index 4384a1f..bb4b809 100644 --- a/src/classlib/local.cc +++ b/src/classlib/local.cc @@ -46,7 +46,7 @@ #endif -#include "pw3270class.h" +#include #include #include #include @@ -466,6 +466,20 @@ return new string(""); } + int set_cursor_position(int row, int col) + { + return _set_cursor_position(hSession,row,col); + } + + int set_cursor_addr(int addr) + { + return _set_cursor_addr(hSession,addr); + } + + int get_cursor_addr(void) + { + return _get_cursor_addr(hSession); + } }; diff --git a/src/classlib/pw3270class.h b/src/classlib/pw3270class.h deleted file mode 100644 index 10f8809..0000000 --- a/src/classlib/pw3270class.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * "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 pw3270class.c e possui - linhas de código. - * - * Contatos: - * - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) - * - */ - -#ifndef PW3270_CLASS_H_INCLUDED - - #define PW3270_CLASS_H_INCLUDED 1 - - #ifdef WIN32 - #define SYSTEM_CHARSET "CP1252" - #else - #define SYSTEM_CHARSET "UTF-8" - #endif // WIN32 - - #include - #include - #include - - #ifdef HAVE_ICONV - #include - #endif // HAVE_ICONV - - #include - #include - #include - - namespace pw3270 - { - using namespace std; - - class exception : public std::exception - { - public: - exception(int code, const char *fmt, ...); - exception(const char *fmt, ...); - - virtual const char * what() const throw(); - - private: - int code; - char msg[4096]; - - }; - - class session - { - public: - - session(); - virtual ~session(); - - // Factory methods and settings - static session * create(const char *name = 0); - static session * start(const char *name = 0); - static session * get_default(void); - static void set_plugin(session * (*factory)(const char *name)); - - // Object settings - void set_charset(const char *charset); - - // Log management - void log(const char *fmt, ...); - void logva(const char *fmt, va_list args); - - // 3270 methods - virtual string get_version(void); - virtual string get_revision(void); - - virtual bool is_connected(void) = 0; - virtual bool is_ready(void) = 0; - - virtual LIB3270_CSTATE get_cstate(void) = 0; - - virtual int connect(const char *uri, bool wait = true) = 0; - virtual int disconnect(void) = 0; - - virtual int wait_for_ready(int seconds) = 0; - virtual int wait(int seconds) = 0; - virtual int iterate(bool wait = true) = 0; - - virtual string * get_text_at(int row, int col, size_t sz) = 0; - virtual int set_text_at(int row, int col, const char *str) = 0; - virtual string * get_text(int baddr, size_t len) = 0; - virtual int cmp_text_at(int row, int col, const char *text) = 0; - virtual int wait_for_text_at(int row, int col, const char *key, int timeout); - -// virtual int set_cursor_position(int row, int col) = 0; -// virtual int set_cursor_addr(int addr) = 0; -// virtual int get_cursor_addr(void) = 0; - -// virtual int set_toggle(LIB3270_TOGGLE ix, bool value) = 0; - -// virtual int enter(void) = 0; -// virtual int pfkey(int key) = 0; -// virtual int pakey(int key) = 0; - -// virtual int emulate_input(const char *str) = 0; - -// virtual int get_field_start(int baddr = -1) = 0; -// virtual int get_field_len(int baddr = -1) = 0; -// virtual int get_next_unprotected(int baddr = -1) = 0; - -// virtual int set_copy(const char *text); -// virtual char * get_copy(void); - -// virtual char * get_clipboard(void); -// virtual int set_clipboard(const char *text); - -// virtual int quit(void) = 0; - - // Dialogs -// virtual int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...); -// virtual char * file_chooser_dialog(GtkFileChooserAction action, const char *title, const char *extension, const char *filename); - - private: - - session * prev; - session * next; - - static session * first; - static session * last; - - static session * (*factory)(const char *name); - - static session * create_remote(const char *name); - static session * create_local(void); - -#ifdef HAVE_ICONV - iconv_t conv2Local; - iconv_t conv2Host; -#endif - - }; - - - } - - -#endif // PW3270_CLASS_H_INCLUDED diff --git a/src/classlib/remote.cc b/src/classlib/remote.cc index b4c4143..eff400d 100644 --- a/src/classlib/remote.cc +++ b/src/classlib/remote.cc @@ -43,7 +43,7 @@ #include #endif // WIN32 - #include "pw3270class.h" + #include #include #if defined(HAVE_DBUS) @@ -63,6 +63,17 @@ HANDLE hPipe; + int query_intval(HLLAPI_PACKET id) + { + struct hllapi_packet_query query = { id }; + struct hllapi_packet_result response; + DWORD cbSize = sizeof(query); + if(TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL)) + return response.rc; + + throw exception("Error %d in TransactNamedPipe",GetLastError()); + } + #elif defined(HAVE_DBUS) DBusConnection * conn; @@ -390,11 +401,7 @@ { #if defined(WIN32) - static const struct hllapi_packet_query query = { HLLAPI_PACKET_IS_CONNECTED }; - struct hllapi_packet_result response; - DWORD cbSize = sizeof(query); - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); - return response.rc != 0; + return query_intval(HLLAPI_PACKET_IS_CONNECTED) != 0; #elif defined(HAVE_DBUS) @@ -409,11 +416,7 @@ { #if defined(WIN32) - static const struct hllapi_packet_query query = { HLLAPI_PACKET_GET_CSTATE }; - struct hllapi_packet_result response; - DWORD cbSize = sizeof(query); - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); - return (LIB3270_CSTATE) response.rc; + return (LIB3270_CSTATE) query_intval(HLLAPI_PACKET_GET_CSTATE); #elif defined(HAVE_DBUS) @@ -531,11 +534,7 @@ { #if defined(WIN32) - static const struct hllapi_packet_query query = { HLLAPI_PACKET_IS_READY }; - struct hllapi_packet_result response; - DWORD cbSize = sizeof(query); - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); - return response.rc != 0; + return query_intval(HLLAPI_PACKET_IS_READY) != 0; #elif defined(HAVE_DBUS) @@ -551,11 +550,7 @@ { #if defined(WIN32) - static const struct hllapi_packet_query query = { HLLAPI_PACKET_DISCONNECT }; - struct hllapi_packet_result response; - DWORD cbSize = sizeof(query); - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); - return 0; + return query_intval(HLLAPI_PACKET_DISCONNECT); #elif defined(HAVE_DBUS) @@ -776,6 +771,77 @@ } + int set_cursor_position(int row, int col) + { +#if defined(WIN32) + + struct hllapi_packet_cursor query = { HLLAPI_PACKET_SET_CURSOR_POSITION, (unsigned short) row, (unsigned short) col }; + struct hllapi_packet_result response; + DWORD cbSize = sizeof(query); + TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); + return response.rc != 0; + +#elif defined(HAVE_DBUS) + + dbus_int32_t r = (dbus_int32_t) row; + dbus_int32_t c = (dbus_int32_t) col; + + DBusMessage * msg = create_message("setCursorAt"); + if(msg) + { + dbus_message_append_args(msg, DBUS_TYPE_INT32, &r, DBUS_TYPE_INT32, &c, DBUS_TYPE_INVALID); + return get_intval(call(msg)); + } + +#endif + + return -1; + } + + int set_cursor_addr(int addr) + { +#if defined(WIN32) + + struct hllapi_packet_addr query = { HLLAPI_PACKET_SET_CURSOR, (unsigned short) addr }; + struct hllapi_packet_result response; + DWORD cbSize = sizeof(query); + TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); + return response.rc; + +#elif defined(HAVE_DBUS) + + dbus_int32_t k = (dbus_int32_t) addr; + + DBusMessage * msg = create_message("setCursorAddress"); + if(msg) + { + dbus_message_append_args(msg, DBUS_TYPE_INT32, &k, DBUS_TYPE_INVALID); + return get_intval(call(msg)); + } + +#endif + + return -1; + } + + int get_cursor_addr(void) + { +#if defined(WIN32) + + return query_intval(HLLAPI_PACKET_GET_CURSOR); + +#elif defined(HAVE_DBUS) + + return query_intval("getCursorAddress"); + +#else + + return -1; + +#endif + } + + }; session * session::create_remote(const char *session) diff --git a/src/classlib/session.cc b/src/classlib/session.cc index 44967ca..00c79e6 100644 --- a/src/classlib/session.cc +++ b/src/classlib/session.cc @@ -30,7 +30,7 @@ #include #include - #include "pw3270class.h" + #include #ifdef HAVE_SYSLOG #include diff --git a/src/classlib/testprogram.cc b/src/classlib/testprogram.cc index abf938e..97a30fd 100644 --- a/src/classlib/testprogram.cc +++ b/src/classlib/testprogram.cc @@ -27,7 +27,7 @@ * */ - #include "pw3270class.h" + #include #include using namespace std; diff --git a/src/include/pw3270/class.h b/src/include/pw3270/class.h new file mode 100644 index 0000000..a502e86 --- /dev/null +++ b/src/include/pw3270/class.h @@ -0,0 +1,164 @@ +/* + * "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 pw3270class.c e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + +#ifndef PW3270_CLASS_H_INCLUDED + + #define PW3270_CLASS_H_INCLUDED 1 + + #ifdef WIN32 + #define SYSTEM_CHARSET "CP1252" + #else + #define SYSTEM_CHARSET "UTF-8" + #endif // WIN32 + + #include + #include + #include + + #ifdef HAVE_ICONV + #include + #endif // HAVE_ICONV + + #include + #include + #include + + namespace pw3270 + { + using namespace std; + + class exception : public std::exception + { + public: + exception(int code, const char *fmt, ...); + exception(const char *fmt, ...); + + virtual const char * what() const throw(); + + private: + int code; + char msg[4096]; + + }; + + class session + { + public: + + session(); + virtual ~session(); + + // Factory methods and settings + static session * create(const char *name = 0); + static session * start(const char *name = 0); + static session * get_default(void); + static void set_plugin(session * (*factory)(const char *name)); + + // Object settings + void set_charset(const char *charset); + + // Log management + void log(const char *fmt, ...); + void logva(const char *fmt, va_list args); + + // 3270 methods + virtual string get_version(void); + virtual string get_revision(void); + + virtual bool is_connected(void) = 0; + virtual bool is_ready(void) = 0; + + virtual LIB3270_CSTATE get_cstate(void) = 0; + + virtual int connect(const char *uri, bool wait = true) = 0; + virtual int disconnect(void) = 0; + + virtual int wait_for_ready(int seconds) = 0; + virtual int wait(int seconds) = 0; + virtual int iterate(bool wait = true) = 0; + + virtual string * get_text_at(int row, int col, size_t sz) = 0; + virtual int set_text_at(int row, int col, const char *str) = 0; + virtual string * get_text(int baddr, size_t len) = 0; + virtual int cmp_text_at(int row, int col, const char *text) = 0; + virtual int wait_for_text_at(int row, int col, const char *key, int timeout); + + virtual int set_cursor_position(int row, int col) = 0; + virtual int set_cursor_addr(int addr) = 0; + virtual int get_cursor_addr(void) = 0; + +// virtual int set_toggle(LIB3270_TOGGLE ix, bool value) = 0; + +// virtual int enter(void) = 0; +// virtual int pfkey(int key) = 0; +// virtual int pakey(int key) = 0; + +// virtual int emulate_input(const char *str) = 0; + +// virtual int get_field_start(int baddr = -1) = 0; +// virtual int get_field_len(int baddr = -1) = 0; +// virtual int get_next_unprotected(int baddr = -1) = 0; + +// virtual int set_copy(const char *text); +// virtual char * get_copy(void); + +// virtual char * get_clipboard(void); +// virtual int set_clipboard(const char *text); + +// virtual int quit(void) = 0; + + // Dialogs +// virtual int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...); +// virtual char * file_chooser_dialog(GtkFileChooserAction action, const char *title, const char *extension, const char *filename); + + private: + + session * prev; + session * next; + + static session * first; + static session * last; + + static session * (*factory)(const char *name); + + static session * create_remote(const char *name); + static session * create_local(void); + +#ifdef HAVE_ICONV + iconv_t conv2Local; + iconv_t conv2Host; +#endif + + }; + + + } + + +#endif // PW3270_CLASS_H_INCLUDED diff --git a/src/plugins/rx3270/remote.cc b/src/plugins/rx3270/remote.cc index 3b8af45..db902e2 100644 --- a/src/plugins/rx3270/remote.cc +++ b/src/plugins/rx3270/remote.cc @@ -1132,7 +1132,7 @@ int remote::set_cursor_addr(int addr) if(hPipe != INVALID_HANDLE_VALUE) { - struct hllapi_packet_addr query = { HLLAPI_PACKET_FIELD_LEN, (unsigned short) addr }; + struct hllapi_packet_addr query = { HLLAPI_PACKET_SET_CURSOR, (unsigned short) addr }; struct hllapi_packet_result response; DWORD cbSize = sizeof(query); TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); -- libgit2 0.21.2