diff --git a/src/classlib/local.cc b/src/classlib/local.cc index 289f28e..e1f4d97 100644 --- a/src/classlib/local.cc +++ b/src/classlib/local.cc @@ -146,6 +146,7 @@ int (*_get_cursor_addr)(H3270 *h); int (*_emulate_input)(H3270 *session, const char *s, int len, int pasting); int (*_get_next_unprotected)(H3270 *hSession, int baddr0); + int (*_get_is_protected)(H3270 *hSession, int baddr); void (*_popup_va)(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, va_list); void * (*_free)(void *); const char * (*_get_display_charset)(H3270 *hSession); @@ -204,6 +205,7 @@ { (void **) & _get_cursor_addr, "lib3270_get_cursor_address" }, { (void **) & _emulate_input, "lib3270_emulate_input" }, { (void **) & _get_next_unprotected, "lib3270_get_next_unprotected" }, + { (void **) & _get_is_protected, "lib3270_get_is_protected" }, { (void **) & _popup_va, "lib3270_popup_va" }, { (void **) & _free, "lib3270_free" }, { (void **) & _get_display_charset, "lib3270_get_display_charset" }, @@ -394,6 +396,11 @@ return _get_next_unprotected(hSession,baddr); } + int get_is_protected(int baddr) + { + return _get_is_protected(hSession,baddr); + } + int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...) { va_list args; diff --git a/src/classlib/remote.cc b/src/classlib/remote.cc index a15754d..1aba487 100644 --- a/src/classlib/remote.cc +++ b/src/classlib/remote.cc @@ -1228,6 +1228,36 @@ } + int get_is_protected(int baddr) + { +#if defined(WIN32) + + struct hllapi_packet_addr query = { HLLAPI_PACKET_IS_PROTECTED, (unsigned short) baddr }; + + return query_intval((void *) &query, sizeof(query)); + +#elif defined(HAVE_DBUS) + + dbus_int32_t k = (dbus_int32_t) baddr; + + DBusMessage * msg = create_message("getIsProtected"); + if(msg) + { + dbus_message_append_args(msg, DBUS_TYPE_INT32, &k, DBUS_TYPE_INVALID); + return get_intval(call(msg)); + } + + return -1; + +#else + + return -1; + +#endif + + } + + int set_host_charset(const char *charset) { #if defined(WIN32) diff --git a/src/include/pw3270/class.h b/src/include/pw3270/class.h index 2e8af02..100e0a9 100644 --- a/src/include/pw3270/class.h +++ b/src/include/pw3270/class.h @@ -220,6 +220,7 @@ 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 get_is_protected(int baddr = -1) = 0; // Clipboard management virtual int set_copy(const char *text); diff --git a/src/include/pw3270/ipcpackets.h b/src/include/pw3270/ipcpackets.h index fa8c664..9324dd8 100644 --- a/src/include/pw3270/ipcpackets.h +++ b/src/include/pw3270/ipcpackets.h @@ -58,6 +58,7 @@ HLLAPI_PACKET_FIELD_START, HLLAPI_PACKET_FIELD_LEN, HLLAPI_PACKET_NEXT_UNPROTECTED, + HLLAPI_PACKET_IS_PROTECTED, HLLAPI_PACKET_QUIT, HLLAPI_PACKET_SET_HOST_CHARSET, diff --git a/src/java/plugin.cc b/src/java/plugin.cc index ab69db9..c9fd292 100644 --- a/src/java/plugin.cc +++ b/src/java/plugin.cc @@ -234,6 +234,10 @@ return lib3270_get_next_unprotected(hSession,baddr); } + int get_is_protected(int baddr = -1) { + return lib3270_is_protected(hSession,baddr); + } + int set_copy(const char *text) { v3270_set_copy(GTK_WIDGET(lib3270_get_user_data(hSession)),text); return 0; diff --git a/src/java/terminal.java b/src/java/terminal.java index 26e7f08..96652a9 100644 --- a/src/java/terminal.java +++ b/src/java/terminal.java @@ -306,6 +306,16 @@ public class terminal 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); + + /** * Get next field address. * * @return Address of the next field. diff --git a/src/plugins/rx3270/pluginmain.cc b/src/plugins/rx3270/pluginmain.cc index b745ad3..afb14bc 100644 --- a/src/plugins/rx3270/pluginmain.cc +++ b/src/plugins/rx3270/pluginmain.cc @@ -126,6 +126,7 @@ int get_field_start(int baddr = -1); int get_field_len(int baddr = -1); int get_next_unprotected(int baddr = -1); + int get_is_protected(int baddr = -1); int set_copy(const char *text); string get_copy(void); diff --git a/src/plugins/rx3270/rexx_methods.cc b/src/plugins/rx3270/rexx_methods.cc index 8f9d85c..a4b6171 100644 --- a/src/plugins/rx3270/rexx_methods.cc +++ b/src/plugins/rx3270/rexx_methods.cc @@ -465,6 +465,15 @@ RexxMethod2(int, rx3270_method_get_next_unprotected, CSELF, sessionPtr, OPTIONAL return baddr; } +RexxMethod2(int, rx3270_method_get_is_protected, CSELF, sessionPtr, OPTIONAL_int, baddr) +{ + session *hSession = (session *) sessionPtr; + if(!hSession) + return -1; + + return hSession->get_is_protected(baddr); +} + RexxMethod1(RexxStringObject, rx3270_method_get_selection, CSELF, sessionPtr) { try diff --git a/src/plugins/rx3270/rx3270.cls b/src/plugins/rx3270/rx3270.cls index 8a10fdb..007c1ff 100644 --- a/src/plugins/rx3270/rx3270.cls +++ b/src/plugins/rx3270/rx3270.cls @@ -82,6 +82,7 @@ ::METHOD GETFIELDSTART EXTERNAL "LIBRARY rx3270 rx3270_method_get_field_start" ::METHOD GETFIELDLEN EXTERNAL "LIBRARY rx3270 rx3270_method_get_field_len" ::METHOD GETNEXTUNPROTECTED EXTERNAL "LIBRARY rx3270 rx3270_method_get_next_unprotected" +::METHOD GETISPROTECTED EXTERNAL "LIBRARY rx3270 rx3270_method_get_is_protected" ::METHOD GETSELECTION EXTERNAL "LIBRARY rx3270 rx3270_method_get_selection" ::METHOD SETSELECTION EXTERNAL "LIBRARY rx3270 rx3270_method_set_selection" diff --git a/src/plugins/rx3270/rx3270.h b/src/plugins/rx3270/rx3270.h index 4b6cb1f..841e661 100644 --- a/src/plugins/rx3270/rx3270.h +++ b/src/plugins/rx3270/rx3270.h @@ -124,6 +124,7 @@ REXX_METHOD_PROTOTYPE(rx3270_method_get_field_len); REXX_METHOD_PROTOTYPE(rx3270_method_get_field_start); REXX_METHOD_PROTOTYPE(rx3270_method_get_next_unprotected); + REXX_METHOD_PROTOTYPE(rx3270_method_get_is_protected); REXX_METHOD_PROTOTYPE(rx3270_method_get_selection); REXX_METHOD_PROTOTYPE(rx3270_method_set_selection); REXX_METHOD_PROTOTYPE(rx3270_method_get_clipboard); @@ -141,114 +142,6 @@ /*--[ 3270 Session ]-----------------------------------------------------------------------------------------*/ -/* -#if defined (HAVE_GNUC_VISIBILITY) - class __attribute__((visibility("default"))) rx3270 -#elif defined(WIN32) - class __declspec (dllexport) rx3270 -#else - #error NOT_IMPLEMENTED -#endif - { - - protected: -#ifdef HAVE_ICONV - iconv_t conv2Local; - iconv_t conv2Host; -#endif - - public: - - class exception : public std::exception - { - public: - exception(int code, const char *fmt, ...); - exception(const char *fmt, ...); - - const char * getMessage(void); - void logMessage(void); - - void RaiseException(RexxMethodContext *context); - void RaiseException(RexxCallContext *context); - - virtual const char * what() const throw(); - - private: - int code; - char msg[4096]; - - }; - - rx3270(const char *local = REXX_DEFAULT_CHARSET, const char *remote = "ISO-8859-1"); - - virtual ~rx3270(); - - virtual void free(void *ptr); - - - static rx3270 * create(const char *name = NULL); - static rx3270 * create_remote(const char *name); - static rx3270 * create_local(void); - static rx3270 * get_default(void); - - static void set_plugin(rx3270 * (*factory)(const char *name)); - - char * get_3270_string(const char *str); - char * get_local_string(const char *str); - - void log(const char *fmt, ...); - virtual void logva(const char *fmt, va_list arg); - - virtual char * get_version(void); - virtual char * get_revision(void); - virtual LIB3270_CSTATE get_cstate(void) = 0; - - virtual int connect(const char *uri, bool wait = true) = 0; - virtual int disconnect(void) = 0; - virtual bool is_connected(void) = 0; - virtual bool is_ready(void) = 0; - virtual int iterate(bool wait = true) = 0; - virtual int wait(int seconds) = 0; - virtual int wait_for_ready(int seconds) = 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 char * get_text_at(int row, int col, size_t sz) = 0; - virtual char * get_text(int baddr, size_t len) = 0; - virtual int cmp_text_at(int row, int col, const char *text) = 0; - virtual int set_text_at(int row, int col, const char *str) = 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); - - }; - - rx3270 * create_lib3270_instance(void); -*/ - #ifdef __cplusplus extern "C" { #endif -- libgit2 0.21.2