Commit 6c6092190e1933d2982105f6de61c511738731b9

Authored by perry.werneck@gmail.com
1 parent 0a3c9668

Incluindo suporte para janelas popup no plugin rexx

src/include/lib3270.h
@@ -275,21 +275,6 @@ @@ -275,21 +275,6 @@
275 275
276 #define LIB3270_SSL_FAILED LIB3270_SSL_UNSECURE 276 #define LIB3270_SSL_FAILED LIB3270_SSL_UNSECURE
277 277
278 - /**  
279 - * Notification message types.  
280 - *  
281 - */  
282 - typedef enum _LIB3270_NOTIFY  
283 - {  
284 - LIB3270_NOTIFY_INFO, /**< Simple information dialog */  
285 - LIB3270_NOTIFY_WARNING,  
286 - LIB3270_NOTIFY_ERROR,  
287 - LIB3270_NOTIFY_CRITICAL, /**< Critical error, user can abort application */  
288 -  
289 - LIB3270_NOTIFY_USER /**< Reserved, always the last one */  
290 - } LIB3270_NOTIFY;  
291 -  
292 -  
293 #ifdef __cplusplus 278 #ifdef __cplusplus
294 extern "C" { 279 extern "C" {
295 #endif 280 #endif
@@ -1018,17 +1003,6 @@ @@ -1018,17 +1003,6 @@
1018 */ 1003 */
1019 LIB3270_EXPORT const char * lib3270_get_revision(void); 1004 LIB3270_EXPORT const char * lib3270_get_revision(void);
1020 1005
1021 - /**  
1022 - * Pop up an error dialog, based on an error number.  
1023 - *  
1024 - * @param hSession Session handle  
1025 - * @param errn Error number (errno).  
1026 - * @param fmt Message format  
1027 - * @param ... Arguments for message  
1028 - */  
1029 - LIB3270_EXPORT void lib3270_popup_an_errno(H3270 *hSession, int errn, const char *fmt, ...);  
1030 -  
1031 -  
1032 LIB3270_EXPORT char * lib3270_vsprintf(const char *fmt, va_list args); 1006 LIB3270_EXPORT char * lib3270_vsprintf(const char *fmt, va_list args);
1033 1007
1034 LIB3270_EXPORT int lib3270_clear_operator_error(H3270 *hSession); 1008 LIB3270_EXPORT int lib3270_clear_operator_error(H3270 *hSession);
src/include/lib3270/popup.h
@@ -37,9 +37,35 @@ @@ -37,9 +37,35 @@
37 extern "C" { 37 extern "C" {
38 #endif 38 #endif
39 39
  40 + /**
  41 + * Notification message types.
  42 + *
  43 + */
  44 + typedef enum _LIB3270_NOTIFY
  45 + {
  46 + LIB3270_NOTIFY_INFO, /**< Simple information dialog */
  47 + LIB3270_NOTIFY_WARNING,
  48 + LIB3270_NOTIFY_ERROR,
  49 + LIB3270_NOTIFY_CRITICAL, /**< Critical error, user can abort application */
  50 +
  51 + LIB3270_NOTIFY_USER /**< Reserved, always the last one */
  52 + } LIB3270_NOTIFY;
  53 +
40 LIB3270_EXPORT void lib3270_set_popup_handler(int (*popup_handler)(H3270 *, void *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list)); 54 LIB3270_EXPORT void lib3270_set_popup_handler(int (*popup_handler)(H3270 *, void *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list));
  55 +
  56 + /**
  57 + * Pop up an error dialog, based on an error number.
  58 + *
  59 + * @param hSession Session handle
  60 + * @param errn Error number (errno).
  61 + * @param fmt Message format
  62 + * @param ... Arguments for message
  63 + */
  64 + LIB3270_EXPORT void lib3270_popup_an_errno(H3270 *hSession, int errn, const char *fmt, ...);
  65 +
41 LIB3270_EXPORT void lib3270_popup_dialog(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...); 66 LIB3270_EXPORT void lib3270_popup_dialog(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...);
42 67
  68 + LIB3270_EXPORT void lib3270_popup_va(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, va_list);
43 69
44 #ifdef __cplusplus 70 #ifdef __cplusplus
45 } 71 }
src/include/lib3270/session.h
@@ -33,6 +33,7 @@ @@ -33,6 +33,7 @@
33 33
34 #define LIB3270_SESSION_H_INCLUDED 1 34 #define LIB3270_SESSION_H_INCLUDED 1
35 #include <sys/time.h> 35 #include <sys/time.h>
  36 + #include <lib3270/popup.h>
36 37
37 #define LIB3270_LUNAME_LENGTH 16 38 #define LIB3270_LUNAME_LENGTH 16
38 #define LIB3270_FULL_MODEL_NAME_LENGTH 13 39 #define LIB3270_FULL_MODEL_NAME_LENGTH 13
src/include/pw3270/v3270.h
@@ -34,6 +34,7 @@ @@ -34,6 +34,7 @@
34 #include <gtk/gtk.h> 34 #include <gtk/gtk.h>
35 #include <lib3270/config.h> 35 #include <lib3270/config.h>
36 #include <lib3270.h> 36 #include <lib3270.h>
  37 + #include <lib3270/popup.h>
37 38
38 #define V3270_H_INCLUDED 1 39 #define V3270_H_INCLUDED 1
39 40
src/lib3270/screen.c
@@ -845,14 +845,19 @@ LIB3270_EXPORT void lib3270_set_popup_handler(int (*handler)(H3270 *, void *, LI @@ -845,14 +845,19 @@ LIB3270_EXPORT void lib3270_set_popup_handler(int (*handler)(H3270 *, void *, LI
845 LIB3270_EXPORT void lib3270_popup_dialog(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...) 845 LIB3270_EXPORT void lib3270_popup_dialog(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...)
846 { 846 {
847 va_list args; 847 va_list args;
  848 + va_start(args, fmt);
  849 + lib3270_popup_va(session, id, title, message, fmt, args);
  850 + va_end(args);
  851 +}
  852 +
  853 +LIB3270_EXPORT void lib3270_popup_va(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, va_list args)
  854 +{
848 855
849 CHECK_SESSION_HANDLE(session); 856 CHECK_SESSION_HANDLE(session);
850 857
851 trace("%s: title=%s msg=%s",__FUNCTION__,"3270 Error",message); 858 trace("%s: title=%s msg=%s",__FUNCTION__,"3270 Error",message);
852 859
853 - va_start(args, fmt);  
854 popup_handler(session,session->widget,id,title ? title : _( "3270 Error" ), message,fmt,args); 860 popup_handler(session,session->widget,id,title ? title : _( "3270 Error" ), message,fmt,args);
855 - va_end(args);  
856 } 861 }
857 862
858 LIB3270_EXPORT int lib3270_is_protected(H3270 *h, unsigned int baddr) 863 LIB3270_EXPORT int lib3270_is_protected(H3270 *h, unsigned int baddr)
src/plugins/rx3270/local.cc
@@ -88,6 +88,8 @@ @@ -88,6 +88,8 @@
88 int get_field_len(int baddr = -1); 88 int get_field_len(int baddr = -1);
89 int get_next_unprotected(int baddr = -1); 89 int get_next_unprotected(int baddr = -1);
90 90
  91 + int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...);
  92 +
91 private: 93 private:
92 94
93 const char * (*_get_version)(void); 95 const char * (*_get_version)(void);
@@ -114,6 +116,7 @@ @@ -114,6 +116,7 @@
114 int (*_get_cursor_addr)(H3270 *h); 116 int (*_get_cursor_addr)(H3270 *h);
115 int (*_emulate_input)(H3270 *session, const char *s, int len, int pasting); 117 int (*_emulate_input)(H3270 *session, const char *s, int len, int pasting);
116 int (*_get_next_unprotected)(H3270 *hSession, int baddr0); 118 int (*_get_next_unprotected)(H3270 *hSession, int baddr0);
  119 + void (*_popup_va)(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, va_list);
117 120
118 #ifdef WIN32 121 #ifdef WIN32
119 HMODULE hModule; 122 HMODULE hModule;
@@ -247,7 +250,7 @@ dynamic::dynamic() @@ -247,7 +250,7 @@ dynamic::dynamic()
247 { (void **) & _get_cursor_addr, "lib3270_get_cursor_address" }, 250 { (void **) & _get_cursor_addr, "lib3270_get_cursor_address" },
248 { (void **) & _emulate_input, "lib3270_emulate_input" }, 251 { (void **) & _emulate_input, "lib3270_emulate_input" },
249 { (void **) & _get_next_unprotected, "lib3270_get_next_unprotected" }, 252 { (void **) & _get_next_unprotected, "lib3270_get_next_unprotected" },
250 - 253 + { (void **) & _popup_va, "lib3270_popup_va" },
251 }; 254 };
252 255
253 // Load lib3270.dll 256 // Load lib3270.dll
@@ -572,3 +575,16 @@ int dynamic::get_next_unprotected(int baddr) @@ -572,3 +575,16 @@ int dynamic::get_next_unprotected(int baddr)
572 return _get_next_unprotected(hSession,baddr); 575 return _get_next_unprotected(hSession,baddr);
573 return -1; 576 return -1;
574 } 577 }
  578 +
  579 +int dynamic::popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...)
  580 +{
  581 + if(hModule)
  582 + {
  583 + va_list args;
  584 + va_start(args, fmt);
  585 + _popup_va(hSession, id, title, message, fmt, args);
  586 + va_end(args);
  587 + return 0;
  588 + }
  589 + return -1;
  590 +}
src/plugins/rx3270/pluginmain.cc
@@ -107,6 +107,8 @@ @@ -107,6 +107,8 @@
107 char * get_clipboard(void); 107 char * get_clipboard(void);
108 int set_clipboard(const char *text); 108 int set_clipboard(const char *text);
109 109
  110 + int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...);
  111 +
110 protected: 112 protected:
111 113
112 private: 114 private:
@@ -313,6 +315,15 @@ @@ -313,6 +315,15 @@
313 return lib3270_get_next_unprotected(hSession,baddr); 315 return lib3270_get_next_unprotected(hSession,baddr);
314 } 316 }
315 317
  318 +int plugin::popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...)
  319 +{
  320 + va_list args;
  321 + va_start(args, fmt);
  322 + lib3270_popup_va(hSession, id, title, message, fmt, args);
  323 + va_end(args);
  324 + return 0;
  325 +}
  326 +
316 static int REXXENTRY Rexx_IO_exit(RexxExitContext *context, int exitnumber, int subfunction, PEXIT parmBlock) 327 static int REXXENTRY Rexx_IO_exit(RexxExitContext *context, int exitnumber, int subfunction, PEXIT parmBlock)
317 { 328 {
318 trace("%s call with ExitNumber: %d Subfunction: %d",__FUNCTION__,(int) exitnumber, (int) subfunction); 329 trace("%s call with ExitNumber: %d Subfunction: %d",__FUNCTION__,(int) exitnumber, (int) subfunction);
src/plugins/rx3270/rexx_methods.cc
@@ -35,6 +35,7 @@ @@ -35,6 +35,7 @@
35 #include "rx3270.h" 35 #include "rx3270.h"
36 #include <time.h> 36 #include <time.h>
37 #include <string.h> 37 #include <string.h>
  38 + #include <ctype.h>
38 39
39 /*--[ Implement ]------------------------------------------------------------------------------------*/ 40 /*--[ Implement ]------------------------------------------------------------------------------------*/
40 41
@@ -491,3 +492,38 @@ RexxMethod2(int, rx3270_method_set_clipboard, CSELF, sessionPtr, CSTRING, text) @@ -491,3 +492,38 @@ RexxMethod2(int, rx3270_method_set_clipboard, CSELF, sessionPtr, CSTRING, text)
491 return -1; 492 return -1;
492 } 493 }
493 494
  495 +
  496 +RexxMethod5(int, rx3270_method_popup, CSELF, sessionPtr, CSTRING, s_id, CSTRING, title, CSTRING, message, OPTIONAL_CSTRING, det)
  497 +{
  498 + LIB3270_NOTIFY id = LIB3270_NOTIFY_INFO;
  499 + rx3270 * hSession = (rx3270 *) sessionPtr;
  500 +
  501 + if(!hSession)
  502 + return -1;
  503 +
  504 + if(*s_id)
  505 + {
  506 + static const struct _descr
  507 + {
  508 + char str;
  509 + LIB3270_NOTIFY id;
  510 + } descr[] =
  511 + {
  512 + { 'I', LIB3270_NOTIFY_INFO },
  513 + { 'W', LIB3270_NOTIFY_WARNING },
  514 + { 'E', LIB3270_NOTIFY_ERROR },
  515 + { 'C', LIB3270_NOTIFY_CRITICAL },
  516 + };
  517 +
  518 + for(int f=0;f<4;f++)
  519 + {
  520 + if(toupper(*s_id) == descr[f].str)
  521 + {
  522 + id = descr[f].id;
  523 + trace("Using mode %c (%d)",toupper(*s_id),(int) id);
  524 + }
  525 + }
  526 + }
  527 +
  528 + return hSession->popup_dialog(id, title, message, "%s", det ? det : "");
  529 +}
src/plugins/rx3270/rx3270.cc
@@ -44,7 +44,7 @@ @@ -44,7 +44,7 @@
44 #endif // HAVE_SYSLOG 44 #endif // HAVE_SYSLOG
45 45
46 #include <string.h> 46 #include <string.h>
47 - 47 + #include <stdarg.h>
48 48
49 static rx3270 * factory_default(const char *type); 49 static rx3270 * factory_default(const char *type);
50 50
@@ -198,4 +198,8 @@ void rx3270::free(void *ptr) @@ -198,4 +198,8 @@ void rx3270::free(void *ptr)
198 free(ptr); 198 free(ptr);
199 } 199 }
200 200
  201 +int rx3270::popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...)
  202 +{
  203 + return -1;
  204 +}
201 205
src/plugins/rx3270/rx3270.cls
@@ -82,6 +82,8 @@ @@ -82,6 +82,8 @@
82 ::METHOD GETCLIPBOARD EXTERNAL "LIBRARY rx3270 rx3270_method_get_clipboard" 82 ::METHOD GETCLIPBOARD EXTERNAL "LIBRARY rx3270 rx3270_method_get_clipboard"
83 ::METHOD SETCLIPBOARD EXTERNAL "LIBRARY rx3270 rx3270_method_set_clipboard" 83 ::METHOD SETCLIPBOARD EXTERNAL "LIBRARY rx3270 rx3270_method_set_clipboard"
84 84
  85 +::METHOD POPUP EXTERNAL "LIBRARY rx3270 rx3270_method_popup"
  86 +
85 ::method waitForStringAt 87 ::method waitForStringAt
86 use arg row, col, key, timeout 88 use arg row, col, key, timeout
87 if datatype(timeout) <> "NUM" 89 if datatype(timeout) <> "NUM"
src/plugins/rx3270/rx3270.h
@@ -46,6 +46,7 @@ @@ -46,6 +46,7 @@
46 #include <stdio.h> 46 #include <stdio.h>
47 #include <lib3270.h> 47 #include <lib3270.h>
48 #include <lib3270/log.h> 48 #include <lib3270/log.h>
  49 + #include <lib3270/popup.h>
49 #include <stdarg.h> 50 #include <stdarg.h>
50 51
51 #ifndef ETIMEDOUT 52 #ifndef ETIMEDOUT
@@ -114,6 +115,7 @@ @@ -114,6 +115,7 @@
114 REXX_METHOD_PROTOTYPE(rx3270_method_set_selection); 115 REXX_METHOD_PROTOTYPE(rx3270_method_set_selection);
115 REXX_METHOD_PROTOTYPE(rx3270_method_get_clipboard); 116 REXX_METHOD_PROTOTYPE(rx3270_method_get_clipboard);
116 REXX_METHOD_PROTOTYPE(rx3270_method_set_clipboard); 117 REXX_METHOD_PROTOTYPE(rx3270_method_set_clipboard);
  118 + REXX_METHOD_PROTOTYPE(rx3270_method_popup);
117 REXX_METHOD_PROTOTYPE(rx3270_method_get_cursor_addr); 119 REXX_METHOD_PROTOTYPE(rx3270_method_get_cursor_addr);
118 REXX_METHOD_PROTOTYPE(rx3270_method_set_cursor_addr); 120 REXX_METHOD_PROTOTYPE(rx3270_method_set_cursor_addr);
119 REXX_METHOD_PROTOTYPE(rx3270_method_input_text); 121 REXX_METHOD_PROTOTYPE(rx3270_method_input_text);
@@ -198,6 +200,8 @@ @@ -198,6 +200,8 @@
198 virtual char * get_clipboard(void); 200 virtual char * get_clipboard(void);
199 virtual int set_clipboard(const char *text); 201 virtual int set_clipboard(const char *text);
200 202
  203 + virtual int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...);
  204 +
201 }; 205 };
202 206
203 rx3270 * create_lib3270_instance(void); 207 rx3270 * create_lib3270_instance(void);
src/plugins/rx3270/rxapimain.cc
@@ -153,6 +153,8 @@ RexxMethodEntry rx3270_methods[] = @@ -153,6 +153,8 @@ RexxMethodEntry rx3270_methods[] =
153 REXX_METHOD(rx3270_method_get_clipboard, rx3270_method_get_clipboard ), 153 REXX_METHOD(rx3270_method_get_clipboard, rx3270_method_get_clipboard ),
154 REXX_METHOD(rx3270_method_set_clipboard, rx3270_method_set_clipboard ), 154 REXX_METHOD(rx3270_method_set_clipboard, rx3270_method_set_clipboard ),
155 155
  156 + REXX_METHOD(rx3270_method_popup, rx3270_method_popup ),
  157 +
156 REXX_METHOD(rx3270_method_get_cursor_addr, rx3270_method_get_cursor_addr ), 158 REXX_METHOD(rx3270_method_get_cursor_addr, rx3270_method_get_cursor_addr ),
157 REXX_METHOD(rx3270_method_set_cursor_addr, rx3270_method_set_cursor_addr ), 159 REXX_METHOD(rx3270_method_set_cursor_addr, rx3270_method_set_cursor_addr ),
158 REXX_METHOD(rx3270_method_input_text, rx3270_method_input_text ), 160 REXX_METHOD(rx3270_method_input_text, rx3270_method_input_text ),
src/plugins/rx3270/sample/clipboard.rex
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 9
10 if host~connected() = 0 then 10 if host~connected() = 0 then
11 do 11 do
12 - say "Disconnected from host" 12 + host~popup("error","Can't start script","Disconnected from host")
13 return 0 13 return 0
14 end 14 end
15 15
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 22
23 if host~WaitForReady(60) <> 0 then 23 if host~WaitForReady(60) <> 0 then
24 do 24 do
25 - say "Timeout waiting for host" 25 + host~popup("error","Failed","Timeout waiting for host response")
26 return 0 26 return 0
27 end 27 end
28 28