From 827dae935478547caa5df47aff018e33eb3fae3b Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Thu, 29 Aug 2013 00:17:43 +0000 Subject: [PATCH] Incluindo api de charset na versao windows --- src/classlib/remote.cc | 51 ++++++++++++++++++++++++++++++++++++++++++--------- src/include/pw3270/ipcpackets.h | 10 ++++++++++ src/plugins/hllapi/pluginmain.c | 9 +++++++++ 3 files changed, 61 insertions(+), 9 deletions(-) diff --git a/src/classlib/remote.cc b/src/classlib/remote.cc index f68db2b..33e6972 100644 --- a/src/classlib/remote.cc +++ b/src/classlib/remote.cc @@ -986,25 +986,58 @@ } -#if defined(HAVE_DBUS) - string * get_clipboard(void) + int set_host_charset(const char *charset) { - return query_string("getClipboard"); +#if defined(WIN32) + + size_t len = strlen(charset); + struct hllapi_packet_set_text * query; + size_t cbSize = sizeof(struct hllapi_packet_set_text)+len; + + query = (struct hllapi_packet_set_text *) malloc(cbSize); + query->packet_id = HLLAPI_PACKET_SET_HOST_CHARSET; + query->len = len; + strcpy(query->text,charset); + + return query_intval((void *) query, cbSize, true); + +#elif defined(HAVE_DBUS) + + return query_intval("setHostCharset", DBUS_TYPE_STRING, &charset, DBUS_TYPE_INVALID); + +#else + return -1; +#endif } - int set_clipboard(const char *text) + string * get_host_charset(void) { - return query_intval("setClipboard", DBUS_TYPE_STRING, &text, DBUS_TYPE_INVALID); +#if defined(WIN32) + + struct hllapi_packet_query query = { HLLAPI_PACKET_GET_HOST_CHARSET }; + return query_string(&query,sizeof(query),100); + +#elif defined(HAVE_DBUS) + + return query_string("getHostCharset"); + +#else + + return NULL; + +#endif } - int set_host_charset(const char *charset) + +#if defined(HAVE_DBUS) + string * get_clipboard(void) { - return query_intval("setHostCharset", DBUS_TYPE_STRING, &charset, DBUS_TYPE_INVALID); + return query_string("getClipboard"); } - string * get_host_charset(void) + int set_clipboard(const char *text) { - return query_string("getHostCharset"); + return query_intval("setClipboard", DBUS_TYPE_STRING, &text, DBUS_TYPE_INVALID); } string * get_display_charset(void) diff --git a/src/include/pw3270/ipcpackets.h b/src/include/pw3270/ipcpackets.h index 27db5cc..f06ab4b 100644 --- a/src/include/pw3270/ipcpackets.h +++ b/src/include/pw3270/ipcpackets.h @@ -56,6 +56,9 @@ HLLAPI_PACKET_NEXT_UNPROTECTED, HLLAPI_PACKET_QUIT, + HLLAPI_PACKET_SET_HOST_CHARSET, + HLLAPI_PACKET_GET_HOST_CHARSET, + HLLAPI_PACKET_INVALID } HLLAPI_PACKET; @@ -162,6 +165,13 @@ struct hllapi_packet_set unsigned short value; }; +struct hllapi_packet_set_text +{ + unsigned char packet_id; + unsigned short len; + char text[1]; +}; + #pragma pack() diff --git a/src/plugins/hllapi/pluginmain.c b/src/plugins/hllapi/pluginmain.c index eefb3eb..91d40d5 100644 --- a/src/plugins/hllapi/pluginmain.c +++ b/src/plugins/hllapi/pluginmain.c @@ -304,6 +304,15 @@ send_result(source,0); break; + case HLLAPI_PACKET_SET_HOST_CHARSET: + send_result(source,lib3270_set_host_charset( lib3270_get_default_session_handle(), + (unsigned char *) ((struct hllapi_packet_set_text *) source->buffer)->text)); + break; + + case HLLAPI_PACKET_GET_HOST_CHARSET: + send_text(source,lib3270_get_host_charset(lib3270_get_default_session_handle())); + break; + default: send_result(source, EINVAL); g_message("Invalid remote request (id=%d)",source->buffer[0]); -- libgit2 0.21.2