diff --git a/src/oxt/local.cxx b/src/oxt/local.cxx index 842f2e8..b1a3820 100644 --- a/src/oxt/local.cxx +++ b/src/oxt/local.cxx @@ -125,10 +125,20 @@ hThread = NULL; hSession = NULL; - trace("%s",__FUNCTION__); - hModule = osl_loadModuleAscii("lib3270.so",SAL_LOADMODULE_NOW); + hModule = osl_loadModuleAscii("lib3270.so." PACKAGE_VERSION,SAL_LOADMODULE_NOW); + trace("%s: hModule(lib3270.so." PACKAGE_VERSION ")=%p",__FUNCTION__,hModule); + if(!hModule) + { + hModule = osl_loadModuleAscii("lib3270.so." PACKAGE_VERSION,SAL_LOADMODULE_NOW); + trace("%s: hModule(lib3270.so)=%p",__FUNCTION__,hModule); + } + + if(!hModule) + { + log("%s","Error loading lib3270"); return; + } for(int f = 0; f < (sizeof (call) / sizeof ((call)[0]));f++) { diff --git a/src/oxt/remote.cxx b/src/oxt/remote.cxx index 3c45e68..900bbab 100644 --- a/src/oxt/remote.cxx +++ b/src/oxt/remote.cxx @@ -272,7 +272,13 @@ pw3270::ipc3270_session::~ipc3270_session() int pw3270::ipc3270_session::get_revision(void) { #ifdef HAVE_DBUS - + char *ptr = query_string("getRevision"); + if(ptr) + { + int rc = atoi(ptr); + free(ptr); + return rc; + } return -1; #else @@ -286,7 +292,7 @@ LIB3270_MESSAGE pw3270::ipc3270_session::get_state(void) { #ifdef HAVE_DBUS - return (LIB3270_MESSAGE) -1; + return (LIB3270_MESSAGE) query_intval("getMessageID"); #else @@ -299,7 +305,18 @@ char * pw3270::ipc3270_session::get_text_at(int row, int col, int len) { #ifdef HAVE_DBUS - return NULL; + dbus_int32_t r = (dbus_int32_t) row; + dbus_int32_t c = (dbus_int32_t) col; + dbus_int32_t l = (dbus_int32_t) len; + + DBusMessage * msg = create_message("getTextAt"); + if(!msg) + return NULL; + + trace("%s(%d,%d,%d)",__FUNCTION__,r,c,l); + dbus_message_append_args(msg, DBUS_TYPE_INT32, &r, DBUS_TYPE_INT32, &c, DBUS_TYPE_INT32, &l, DBUS_TYPE_INVALID); + + return get_string(call(msg)); #else @@ -312,7 +329,15 @@ int pw3270::ipc3270_session::set_text_at(int row, int col, const char *text) { #ifdef HAVE_DBUS - return -1; + dbus_int32_t r = (dbus_int32_t) row; + dbus_int32_t c = (dbus_int32_t) col; + + DBusMessage * msg = create_message("setTextAt"); + if(msg) + { + dbus_message_append_args(msg, DBUS_TYPE_INT32, &r, DBUS_TYPE_INT32, &c, DBUS_TYPE_STRING, &text, DBUS_TYPE_INVALID); + return get_intval(call(msg)); + } #else @@ -325,7 +350,15 @@ int pw3270::ipc3270_session::cmp_text_at(int row, int col, const char *text) { #ifdef HAVE_DBUS - return -1; + dbus_int32_t r = (dbus_int32_t) row; + dbus_int32_t c = (dbus_int32_t) col; + + DBusMessage * msg = create_message("cmpTextAt"); + if(msg) + { + dbus_message_append_args(msg, DBUS_TYPE_INT32, &r, DBUS_TYPE_INT32, &c, DBUS_TYPE_STRING, &text, DBUS_TYPE_INVALID); + return get_intval(call(msg)); + } #else @@ -336,13 +369,33 @@ int pw3270::ipc3270_session::cmp_text_at(int row, int col, const char *text) void pw3270::ipc3270_session::set_toggle(LIB3270_TOGGLE toggle, bool state) { +#ifdef HAVE_DBUS + + dbus_int32_t i = (dbus_int32_t) toggle; + dbus_int32_t v = (dbus_int32_t) state; + + DBusMessage * msg = create_message("setToggle"); + if(msg) + { + dbus_message_append_args(msg, DBUS_TYPE_INT32, &i, DBUS_TYPE_INT32, &v, DBUS_TYPE_INVALID); + get_intval(call(msg)); + } + +#endif // HAVE_DBUS } int pw3270::ipc3270_session::connect(const char *uri) { #ifdef HAVE_DBUS - return -1; + int rc; + DBusMessage * msg = create_message("connect"); + if(!msg) + return -1; + + dbus_message_append_args(msg, DBUS_TYPE_STRING, &uri, DBUS_TYPE_INVALID); + + return get_intval(call(msg)); #else @@ -355,7 +408,7 @@ int pw3270::ipc3270_session::disconnect(void) { #ifdef HAVE_DBUS - return -1; + return query_intval("disconnect"); #else @@ -368,7 +421,7 @@ bool pw3270::ipc3270_session::connected(void) { #ifdef HAVE_DBUS - return false; + return query_intval("isConnected") > 0; #else @@ -381,7 +434,7 @@ int pw3270::ipc3270_session::enter(void) { #ifdef HAVE_DBUS - return -1; + return query_intval("enter"); #else @@ -394,33 +447,45 @@ int pw3270::ipc3270_session::pfkey(int key) { #ifdef HAVE_DBUS - return -1; + dbus_int32_t k = (dbus_int32_t) key; -#else + DBusMessage * msg = create_message("pfKey"); + if(msg) + { + dbus_message_append_args(msg, DBUS_TYPE_INT32, &k, DBUS_TYPE_INVALID); + return get_intval(call(msg)); + } + +#endif // HAVE_DBUS return -1; -#endif // HAVE_DBUS } int pw3270::ipc3270_session::pakey(int key) { #ifdef HAVE_DBUS - return -1; + dbus_int32_t k = (dbus_int32_t) key; -#else + DBusMessage * msg = create_message("paKey"); + if(msg) + { + dbus_message_append_args(msg, DBUS_TYPE_INT32, &k, DBUS_TYPE_INVALID); + return get_intval(call(msg)); + } + +#endif // HAVE_DBUS return -1; -#endif // HAVE_DBUS } bool pw3270::ipc3270_session::in_tn3270e() { #ifdef HAVE_DBUS - return false; + return query_intval("inTN3270E") > 0; #else @@ -433,6 +498,7 @@ void pw3270::ipc3270_session::mem_free(void *ptr) { #ifdef HAVE_DBUS + free(ptr); #else diff --git a/src/oxt/testprogram.cxx b/src/oxt/testprogram.cxx index 2ca3ce2..f2bfa5f 100644 --- a/src/oxt/testprogram.cxx +++ b/src/oxt/testprogram.cxx @@ -28,15 +28,15 @@ * kraucer@bb.com.br (Kraucer Fernandes Mazuco) * */ - -#include -#ifdef WIN32 - #include - #define sleep(x) Sleep(x) -#endif - -#define trace( fmt, ... ) fprintf(stderr, "%s(%d) " fmt "\n", __FILE__, __LINE__, __VA_ARGS__ ); fflush(stderr); - + +#include +#ifdef WIN32 + #include + #define sleep(x) Sleep(x) +#endif + +#define trace( fmt, ... ) fprintf(stderr, "%s(%d) " fmt "\n", __FILE__, __LINE__, __VA_ARGS__ ); fflush(stderr); + #include "globals.hpp" #include #include @@ -51,10 +51,10 @@ using namespace cppu; int SAL_CALL main(int argc, char **argv) { - Reference< XSimpleRegistry > xReg = createSimpleRegistry(); - + Reference< XSimpleRegistry > xReg = createSimpleRegistry(); + OSL_ENSURE( xReg.is(), "### cannot get service instance of \"com.sun.star.regiystry.SimpleRegistry\"!" ); - + xReg->open(OUString::createFromAscii("pw3270.uno.rdb"), sal_False, sal_False); OSL_ENSURE( xReg->isValid(), "### cannot open test registry \"pw3270.uno.rdb\"!" ); @@ -75,11 +75,11 @@ int SAL_CALL main(int argc, char **argv) OSL_ENSURE( xImplReg.is(), "### cannot get service instance of \"com.sun.star.registry.ImplementationRegistration\"!" ); if (xImplReg.is()) - { + { const char *libname = ".bin/Debug/pw3270.uno.so"; - - trace("Loading %s",libname); - + + trace("Loading %s",libname); + xImplReg->registerImplementation( OUString::createFromAscii("com.sun.star.loader.SharedLibrary"), // loader for component OUString::createFromAscii(libname), // component location @@ -92,8 +92,8 @@ int SAL_CALL main(int argc, char **argv) Reference< XInterface > xx ; xx = xMgr->createInstanceWithContext(OUString::createFromAscii(IMPLNAME), xContext); - - printf("Instance: %p\n",&xx); + + printf("Instance: %p\n",&xx); Reference< pw3270intf > srv( xx, UNO_QUERY ); @@ -107,6 +107,8 @@ int SAL_CALL main(int argc, char **argv) char buffer[4096]; OString str; + srv->setSession(OUString::createFromAscii("pw3270:a")); + printf("Revision:\t%d\n",srv->getRevision()); srv->dsTrace(true); @@ -141,20 +143,20 @@ int SAL_CALL main(int argc, char **argv) printf("Entire screen:\n%s\n",str.pData->buffer); - */ + */ printf("Enter to exit...\n"); fgets(buffer,80,stdin); - printf("Disconnect(): %d\n" , srv->Disconnect()); - + printf("Disconnect(): %d\n" , srv->Disconnect()); + srv->sleep(5); } } - Reference< XComponent >::query( xContext )->dispose(); - + Reference< XComponent >::query( xContext )->dispose(); + return 0; } diff --git a/src/plugins/dbus3270/gobject.c b/src/plugins/dbus3270/gobject.c index 8cf18f8..7f2e9b1 100644 --- a/src/plugins/dbus3270/gobject.c +++ b/src/plugins/dbus3270/gobject.c @@ -264,6 +264,12 @@ void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, DBus dbus_g_method_return(context,lib3270_is_ready(pw3270_dbus_get_session_handle(object))); } + void pw3270_dbus_in_tn3270_e(PW3270Dbus *object, DBusGMethodInvocation *context) + { + trace("%s object=%p context=%p",__FUNCTION__,object,context); + dbus_g_method_return(context,lib3270_in_tn3270e(pw3270_dbus_get_session_handle(object))); + } + void pw3270_dbus_wait_for_ready(PW3270Dbus *object, int timeout, DBusGMethodInvocation *context) { trace("%s object=%p context=%p",__FUNCTION__,object,context); diff --git a/src/plugins/dbus3270/pw3270dbus.xml b/src/plugins/dbus3270/pw3270dbus.xml index 9d34a87..b2fb639 100644 --- a/src/plugins/dbus3270/pw3270dbus.xml +++ b/src/plugins/dbus3270/pw3270dbus.xml @@ -65,6 +65,10 @@ + + + + diff --git a/src/plugins/dbus3270/service.h b/src/plugins/dbus3270/service.h index 04d1115..1a3ce32 100644 --- a/src/plugins/dbus3270/service.h +++ b/src/plugins/dbus3270/service.h @@ -75,7 +75,7 @@ void pw3270_dbus_is_connected(PW3270Dbus *object, DBusGMethodInvocation *context); void pw3270_dbus_is_ready(PW3270Dbus *object, DBusGMethodInvocation *context); - + void pw3270_dbus_in_tn3270_e(PW3270Dbus *object, DBusGMethodInvocation *context); void pw3270_dbus_set_cursor_at(PW3270Dbus *object, int row, int col, DBusGMethodInvocation *context); void pw3270_dbus_set_toggle(PW3270Dbus *object, int id, int value, DBusGMethodInvocation *context); -- libgit2 0.21.2