Commit 42fa4a104c84dcc6c4ab18b38a649b924ce860a9

Authored by perry.werneck@gmail.com
1 parent 7838137b

Implementando chamadas via DBUS no módulo rexx para linux

src/plugins/dbus3270/gobject.c
... ... @@ -252,3 +252,65 @@ void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, DBus
252 252  
253 253 }
254 254  
  255 + void pw3270_dbus_is_connected(PW3270Dbus *object, DBusGMethodInvocation *context)
  256 + {
  257 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  258 + dbus_g_method_return(context,lib3270_is_connected(pw3270_dbus_get_session_handle(object)));
  259 + }
  260 +
  261 + void pw3270_dbus_is_ready(PW3270Dbus *object, DBusGMethodInvocation *context)
  262 + {
  263 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  264 + dbus_g_method_return(context,lib3270_is_ready(pw3270_dbus_get_session_handle(object)));
  265 + }
  266 +
  267 + void pw3270_dbus_wait_for_ready(PW3270Dbus *object, int timeout, DBusGMethodInvocation *context)
  268 + {
  269 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  270 + dbus_g_method_return(context,lib3270_wait_for_ready(pw3270_dbus_get_session_handle(object),timeout));
  271 + }
  272 +
  273 + void pw3270_dbus_set_cursor_at(PW3270Dbus *object, int row, int col, DBusGMethodInvocation *context)
  274 + {
  275 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  276 + dbus_g_method_return(context,lib3270_set_cursor_position(pw3270_dbus_get_session_handle(object),row,col));
  277 + }
  278 +
  279 + void pw3270_dbus_set_toggle(PW3270Dbus *object, int id, int value, DBusGMethodInvocation *context)
  280 + {
  281 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  282 + lib3270_set_toggle(pw3270_dbus_get_session_handle(object),id,value);
  283 + dbus_g_method_return(context,0);
  284 + }
  285 +
  286 +void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar *utftext, DBusGMethodInvocation *context)
  287 +{
  288 + gchar * text;
  289 + H3270 * hSession = pw3270_dbus_get_session_handle(object);
  290 +
  291 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  292 + if(pw3270_dbus_check_valid_state(object,context))
  293 + return;
  294 +
  295 + text = g_convert_with_fallback(utftext,-1,lib3270_get_charset(hSession),"UTF-8","?",NULL,NULL,NULL);
  296 +
  297 + dbus_g_method_return(context,lib3270_cmp_text_at(hSession,row,col,text));
  298 +
  299 + g_free(text);
  300 +}
  301 +
  302 +void pw3270_dbus_pf_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context)
  303 +{
  304 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  305 + if(pw3270_dbus_check_valid_state(object,context))
  306 + return;
  307 + dbus_g_method_return(context,lib3270_pfkey(pw3270_dbus_get_session_handle(object),key));
  308 +}
  309 +
  310 +void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context)
  311 +{
  312 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  313 + if(pw3270_dbus_check_valid_state(object,context))
  314 + return;
  315 + dbus_g_method_return(context,lib3270_pakey(pw3270_dbus_get_session_handle(object),key));
  316 +}
... ...
src/plugins/dbus3270/main.c
... ... @@ -161,7 +161,10 @@
161 161 dbus_g_method_return(context,0);
162 162 }
163 163  
164   -H3270 * pw3270_dbus_get_session_handle(PW3270Dbus *object)
165   -{
  164 + H3270 * pw3270_dbus_get_session_handle(PW3270Dbus *object)
  165 + {
166 166 return lib3270_get_default_session_handle();
167   -}
  167 + }
  168 +
  169 +
  170 +
... ...
src/plugins/dbus3270/pw3270dbus.xml
... ... @@ -34,6 +34,16 @@
34 34 <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
35 35 <arg type="i" name="result" direction="out" />
36 36 </method>
  37 + <method name="pfKey">
  38 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  39 + <arg type="i" name="key" direction="in" />
  40 + <arg type="i" name="result" direction="out" />
  41 + </method>
  42 + <method name="paKey">
  43 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  44 + <arg type="i" name="key" direction="in" />
  45 + <arg type="i" name="result" direction="out" />
  46 + </method>
37 47 <method name="setTextAt">
38 48 <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
39 49 <arg type="i" name="row" direction="in" />
... ... @@ -45,6 +55,40 @@
45 55 <arg type="i" name="row" direction="in" />
46 56 <arg type="i" name="col" direction="in" />
47 57 <arg type="i" name="len" direction="in" />
  58 + <arg type="s" name="text" direction="out" />
  59 + </method>
  60 + <method name="isConnected">
  61 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  62 + <arg type="i" name="result" direction="out" />
  63 + </method>
  64 + <method name="isReady">
  65 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  66 + <arg type="i" name="result" direction="out" />
  67 + </method>
  68 + <method name="waitForReady">
  69 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  70 + <arg type="i" name="timeout" direction="in" />
  71 + <arg type="i" name="result" direction="out" />
  72 + </method>
  73 + <method name="setCursorAt">
  74 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  75 + <arg type="i" name="row" direction="in" />
  76 + <arg type="i" name="col" direction="in" />
  77 + <arg type="i" name="result" direction="out" />
  78 + </method>
  79 + <method name="setToggle">
  80 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  81 + <arg type="i" name="id" direction="in" />
  82 + <arg type="i" name="value" direction="in" />
  83 + <arg type="i" name="result" direction="out" />
  84 + </method>
  85 + <method name="cmpTextAt">
  86 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  87 + <arg type="i" name="row" direction="in" />
  88 + <arg type="i" name="col" direction="in" />
  89 + <arg type="s" name="text" direction="in" />
  90 + <arg type="i" name="result" direction="out" />
48 91 </method>
  92 +
49 93 </interface>
50 94 </node>
... ...
src/plugins/dbus3270/service.h
... ... @@ -73,10 +73,21 @@
73 73 H3270 * pw3270_dbus_get_session_handle(PW3270Dbus *object);
74 74 GError * pw3270_dbus_get_error_from_errno(int code);
75 75  
  76 + void pw3270_dbus_is_connected(PW3270Dbus *object, DBusGMethodInvocation *context);
  77 + void pw3270_dbus_is_ready(PW3270Dbus *object, DBusGMethodInvocation *context);
  78 +
  79 + void pw3270_dbus_set_cursor_at(PW3270Dbus *object, int row, int col, DBusGMethodInvocation *context);
  80 + void pw3270_dbus_set_toggle(PW3270Dbus *object, int id, int value, DBusGMethodInvocation *context);
  81 +
  82 + void pw3270_dbus_wait_for_ready(PW3270Dbus *object, int timeout, DBusGMethodInvocation *context);
  83 +
76 84 // Actions
77 85 void pw3270_dbus_enter(PW3270Dbus *object, DBusGMethodInvocation *context);
  86 + void pw3270_dbus_pf_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context);
  87 + void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context);
78 88 void pw3270_dbus_set_text_at(PW3270Dbus *object, int row, int col, const gchar *text, DBusGMethodInvocation *context);
79 89 void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, DBusGMethodInvocation *context);
  90 + void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar *text, DBusGMethodInvocation *context);
80 91  
81 92 G_END_DECLS
82 93  
... ...
src/plugins/rx3270/local.cc
... ... @@ -30,12 +30,9 @@
30 30 #include "rx3270.h"
31 31 #include <string.h>
32 32  
33   -#if defined WIN32
34   - #define REXX_DEFAULT_CHARSET "CP1252"
35   -#else
  33 +#if !defined WIN32
36 34 #include <dlfcn.h>
37 35 #include <stdio.h>
38   - #define REXX_DEFAULT_CHARSET "UTF-8"
39 36 #endif
40 37  
41 38 #ifdef HAVE_SYSLOG
... ... @@ -120,11 +117,20 @@
120 117  
121 118 /*--[ Implement ]------------------------------------------------------------------------------------*/
122 119  
123   -rx3270::rx3270()
  120 +rx3270::rx3270(const char *local, const char *remote)
124 121 {
125 122 #ifdef HAVE_ICONV
126   - this->conv2Local = iconv_open(REXX_DEFAULT_CHARSET, "ISO-8859-1");
127   - this->conv2Host = iconv_open("ISO-8859-1",REXX_DEFAULT_CHARSET);
  123 +
  124 + if(strcmp(local,remote))
  125 + {
  126 + // Local and remote charsets aren't the same, setup conversion
  127 + this->conv2Local = iconv_open(local, remote);
  128 + this->conv2Host = iconv_open(remote,local);
  129 + }
  130 + else
  131 + {
  132 + this->conv2Local = this->conv2Host = (iconv_t)(-1);
  133 + }
128 134 #endif
129 135  
130 136 if(!defSession)
... ...
src/plugins/rx3270/remote.cc
... ... @@ -40,6 +40,7 @@
40 40  
41 41 #include <time.h>
42 42 #include <string.h>
  43 + #include <ctype.h>
43 44  
44 45 /*--[ Class definition ]-----------------------------------------------------------------------------*/
45 46  
... ... @@ -124,7 +125,11 @@ rx3270 * rx3270::create_remote(const char *name)
124 125 }
125 126  
126 127  
  128 +#if defined(HAVE_DBUS)
  129 +remote::remote(const char *name) : rx3270(REXX_DEFAULT_CHARSET,"UTF-8")
  130 +#else
127 131 remote::remote(const char *name)
  132 +#endif // HAVE_DBUS
128 133 {
129 134 #if defined(WIN32)
130 135 static DWORD dwMode = PIPE_READMODE_MESSAGE;
... ... @@ -138,6 +143,8 @@ remote::remote(const char *name)
138 143 {
139 144 if(*ptr == ':')
140 145 *ptr = '_';
  146 + else
  147 + *ptr = tolower(*ptr);
141 148 }
142 149  
143 150 snprintf(buffer,4095,"\\\\.\\pipe\\%s",str);
... ... @@ -172,7 +179,12 @@ remote::remote(const char *name)
172 179 DBusError err;
173 180 int rc;
174 181 char * str = strdup(name);
175   - char * ptr = strchr(str,':');
  182 + char * ptr;
  183 +
  184 + for(ptr=str;*ptr;ptr++)
  185 + *ptr = tolower(*ptr);
  186 +
  187 + ptr = strchr(str,':');
176 188  
177 189 if(ptr)
178 190 {
... ... @@ -200,11 +212,28 @@ remote::remote(const char *name)
200 212 strncpy(intf,prefix_dest,sz);
201 213 strncat(intf,str,sz);
202 214  
203   -
204 215 }
205 216 else
206 217 {
207   - exit(-1);
  218 + size_t sz;
  219 +
  220 + // Build destination
  221 + sz = strlen(str)+strlen(prefix_dest)+2;
  222 + dest = (char *) malloc(sz+1);
  223 + strncpy(dest,prefix_dest,sz);
  224 + strncat(dest,str,sz);
  225 +
  226 + // Build path
  227 + sz = strlen(str)+strlen(prefix_path);
  228 + path = (char *) malloc(sz+1);
  229 + strncpy(path,prefix_path,sz);
  230 + strncat(path,str,sz);
  231 +
  232 + // Build intf
  233 + sz = strlen(str)+strlen(prefix_dest)+1;
  234 + intf = (char *) malloc(sz+1);
  235 + strncpy(intf,prefix_dest,sz);
  236 + strncat(intf,str,sz);
208 237  
209 238 }
210 239  
... ... @@ -290,62 +319,73 @@ DBusMessage * remote::call(DBusMessage *msg)
290 319  
291 320 }
292 321  
293   -char * remote::query_string(const char *method)
  322 +char * get_string(DBusMessage * msg)
294 323 {
295 324 char *rc = NULL;
296   -
297   - if(conn)
  325 + if(msg)
298 326 {
299   - DBusMessage * msg = call(create_message(method));
300   - if(msg)
301   - {
302   - DBusMessageIter iter;
  327 + DBusMessageIter iter;
303 328  
304   - if(dbus_message_iter_init(msg, &iter))
  329 + if(dbus_message_iter_init(msg, &iter))
  330 + {
  331 + if(dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_STRING)
305 332 {
306   - if(dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_STRING)
307   - {
308   - const char * str;
309   - dbus_message_iter_get_basic(&iter, &str);
310   - rc = strdup(str);
311   - }
  333 + const char * str;
  334 + dbus_message_iter_get_basic(&iter, &str);
  335 + trace("Response: [%s]",str);
  336 + rc = strdup(str);
312 337 }
313   -
314   - dbus_message_unref(msg);
  338 +#ifdef DEBUG
  339 + else
  340 + {
  341 + trace("Arg type is %c, expecting %c",dbus_message_iter_get_arg_type(&iter),DBUS_TYPE_STRING);
  342 + }
  343 +#endif
315 344 }
316   - }
317 345  
  346 + dbus_message_unref(msg);
  347 + }
318 348 return rc;
319 349 }
320 350  
321   -int remote::query_intval(const char *method)
  351 +char * remote::query_string(const char *method)
  352 +{
  353 + if(conn)
  354 + return get_string(call(create_message(method)));
  355 + return NULL;
  356 +}
  357 +
  358 +int get_intval(DBusMessage * msg)
322 359 {
323 360 int rc = -1;
324 361  
325   - if(conn)
  362 + if(msg)
326 363 {
327   - DBusMessage * msg = call(create_message(method));
328   - if(msg)
329   - {
330   - DBusMessageIter iter;
  364 + DBusMessageIter iter;
331 365  
332   - if(dbus_message_iter_init(msg, &iter))
  366 + if(dbus_message_iter_init(msg, &iter))
  367 + {
  368 + if(dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_INT32)
333 369 {
334   - if(dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_INT32)
335   - {
336   - dbus_int32_t iSigned;
337   - dbus_message_iter_get_basic(&iter, &iSigned);
338   - rc = (int) iSigned;
339   - }
  370 + dbus_int32_t iSigned;
  371 + dbus_message_iter_get_basic(&iter, &iSigned);
  372 + rc = (int) iSigned;
340 373 }
341   -
342   - dbus_message_unref(msg);
343 374 }
  375 +
  376 + dbus_message_unref(msg);
344 377 }
345 378  
346 379 return rc;
347 380 }
348 381  
  382 +int remote::query_intval(const char *method)
  383 +{
  384 + if(conn)
  385 + return get_intval(call(create_message(method)));
  386 + return -1;
  387 +}
  388 +
349 389  
350 390 #endif // HAVE_DBUS
351 391  
... ... @@ -374,7 +414,7 @@ LIB3270_CSTATE remote::get_cstate(void)
374 414  
375 415 if(hPipe != INVALID_HANDLE_VALUE)
376 416 {
377   -
  417 + #warning Implementar
378 418 }
379 419  
380 420 return (LIB3270_CSTATE) -1;
... ... @@ -449,6 +489,20 @@ int remote::connect(const char *uri, bool wait)
449 489  
450 490 #elif defined(HAVE_DBUS)
451 491  
  492 + int rc;
  493 + DBusMessage * msg = create_message("connect");
  494 + if(!msg)
  495 + return -1;
  496 +
  497 + dbus_message_append_args(msg, DBUS_TYPE_STRING, &uri, DBUS_TYPE_INVALID);
  498 +
  499 + rc = get_intval(call(msg));
  500 +
  501 + if(!rc && wait)
  502 + return wait_for_ready(120);
  503 +
  504 + return rc;
  505 +
452 506 #endif
453 507  
454 508 return -1;
... ... @@ -469,6 +523,8 @@ bool remote::is_connected(void)
469 523  
470 524 #elif defined(HAVE_DBUS)
471 525  
  526 + return query_intval("isConnected") != 0;
  527 +
472 528 #endif
473 529  
474 530 return false;
... ... @@ -480,11 +536,13 @@ bool remote::is_ready(void)
480 536  
481 537 if(hPipe != INVALID_HANDLE_VALUE)
482 538 {
483   -
  539 + #warning Implementar
484 540 }
485 541  
486 542 #elif defined(HAVE_DBUS)
487 543  
  544 + return query_intval("isReady") != 0;
  545 +
488 546 #endif
489 547  
490 548 return false;
... ... @@ -564,6 +622,29 @@ int remote::wait_for_ready(int seconds)
564 622  
565 623 #elif defined(HAVE_DBUS)
566 624  
  625 + time_t end = time(0)+seconds;
  626 +
  627 + while(time(0) < end)
  628 + {
  629 + static const dbus_int32_t delay = 2;
  630 +
  631 + DBusMessage * msg = create_message("waitForReady");
  632 + int rc;
  633 +
  634 + if(!msg)
  635 + return -1;
  636 +
  637 + dbus_message_append_args(msg, DBUS_TYPE_INT32, &delay, DBUS_TYPE_INVALID);
  638 +
  639 + rc = get_intval(call(msg));
  640 + trace("waitForReady exits with rc=%d",rc);
  641 + if(rc != ETIMEDOUT)
  642 + return rc;
  643 + }
  644 +
  645 +
  646 + return ETIMEDOUT;
  647 +
567 648 #endif
568 649  
569 650 return -1;
... ... @@ -598,6 +679,19 @@ char * remote::get_text_at(int row, int col, size_t sz)
598 679  
599 680 #elif defined(HAVE_DBUS)
600 681  
  682 + dbus_int32_t r = (dbus_int32_t) row;
  683 + dbus_int32_t c = (dbus_int32_t) col;
  684 + dbus_int32_t l = (dbus_int32_t) sz;
  685 +
  686 + DBusMessage * msg = create_message("getTextAt");
  687 + if(!msg)
  688 + return NULL;
  689 +
  690 + trace("%s(%d,%d,%d)",__FUNCTION__,r,c,l);
  691 + dbus_message_append_args(msg, DBUS_TYPE_INT32, &r, DBUS_TYPE_INT32, &c, DBUS_TYPE_INT32, &l, DBUS_TYPE_INVALID);
  692 +
  693 + return get_string(call(msg));
  694 +
601 695 #endif
602 696  
603 697 return NULL;
... ... @@ -629,6 +723,16 @@ int remote::cmp_text_at(int row, int col, const char *text)
629 723  
630 724 #elif defined(HAVE_DBUS)
631 725  
  726 + dbus_int32_t r = (dbus_int32_t) row;
  727 + dbus_int32_t c = (dbus_int32_t) col;
  728 +
  729 + DBusMessage * msg = create_message("cmpTextAt");
  730 + if(msg)
  731 + {
  732 + dbus_message_append_args(msg, DBUS_TYPE_INT32, &r, DBUS_TYPE_INT32, &c, DBUS_TYPE_STRING, &text, DBUS_TYPE_INVALID);
  733 + return get_intval(call(msg));
  734 + }
  735 +
632 736 #endif
633 737  
634 738 return 0;
... ... @@ -659,6 +763,16 @@ int remote::set_text_at(int row, int col, const char *str)
659 763  
660 764 #elif defined(HAVE_DBUS)
661 765  
  766 + dbus_int32_t r = (dbus_int32_t) row;
  767 + dbus_int32_t c = (dbus_int32_t) col;
  768 +
  769 + DBusMessage * msg = create_message("setTextAt");
  770 + if(msg)
  771 + {
  772 + dbus_message_append_args(msg, DBUS_TYPE_INT32, &r, DBUS_TYPE_INT32, &c, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID);
  773 + return get_intval(call(msg));
  774 + }
  775 +
662 776 #endif
663 777  
664 778 return -1;
... ... @@ -670,11 +784,21 @@ int remote::set_cursor_position(int row, int col)
670 784  
671 785 if(hPipe != INVALID_HANDLE_VALUE)
672 786 {
673   -
  787 + #warning Implementar
674 788 }
675 789  
676 790 #elif defined(HAVE_DBUS)
677 791  
  792 + dbus_int32_t r = (dbus_int32_t) row;
  793 + dbus_int32_t c = (dbus_int32_t) col;
  794 +
  795 + DBusMessage * msg = create_message("setCursorAt");
  796 + if(msg)
  797 + {
  798 + dbus_message_append_args(msg, DBUS_TYPE_INT32, &r, DBUS_TYPE_INT32, &c, DBUS_TYPE_INVALID);
  799 + return get_intval(call(msg));
  800 + }
  801 +
678 802 #endif
679 803  
680 804 return -1;
... ... @@ -722,6 +846,15 @@ int remote::pfkey(int key)
722 846  
723 847 #elif defined(HAVE_DBUS)
724 848  
  849 + dbus_int32_t k = (dbus_int32_t) key;
  850 +
  851 + DBusMessage * msg = create_message("pfKey");
  852 + if(msg)
  853 + {
  854 + dbus_message_append_args(msg, DBUS_TYPE_INT32, &k, DBUS_TYPE_INVALID);
  855 + return get_intval(call(msg));
  856 + }
  857 +
725 858 #endif
726 859  
727 860 return -1;
... ... @@ -742,6 +875,15 @@ int remote::pakey(int key)
742 875  
743 876 #elif defined(HAVE_DBUS)
744 877  
  878 + dbus_int32_t k = (dbus_int32_t) key;
  879 +
  880 + DBusMessage * msg = create_message("paKey");
  881 + if(msg)
  882 + {
  883 + dbus_message_append_args(msg, DBUS_TYPE_INT32, &k, DBUS_TYPE_INVALID);
  884 + return get_intval(call(msg));
  885 + }
  886 +
745 887 #endif
746 888  
747 889 return -1;
... ... @@ -758,6 +900,17 @@ void remote::set_toggle(LIB3270_TOGGLE ix, bool value)
758 900  
759 901 #elif defined(HAVE_DBUS)
760 902  
  903 + dbus_int32_t i = (dbus_int32_t) ix;
  904 + dbus_int32_t v = (dbus_int32_t) value;
  905 +
  906 + DBusMessage * msg = create_message("setToggle");
  907 + if(msg)
  908 + {
  909 + dbus_message_append_args(msg, DBUS_TYPE_INT32, &i, DBUS_TYPE_INT32, &v, DBUS_TYPE_INVALID);
  910 + get_intval(call(msg));
  911 + }
  912 +
  913 +
761 914 #endif
762 915  
763 916 }
... ...
src/plugins/rx3270/rx3270.h
... ... @@ -56,6 +56,13 @@
56 56 #include <iconv.h>
57 57 #endif // HAVE_ICONV
58 58  
  59 +#ifdef WIN32
  60 + #define REXX_DEFAULT_CHARSET "CP1252"
  61 +#else
  62 + #define REXX_DEFAULT_CHARSET "UTF-8"
  63 +#endif // WIN32
  64 +
  65 +
59 66 /*---[ Rexx entry points ]-----------------------------------------------------------------------------------*/
60 67  
61 68 REXX_TYPED_ROUTINE_PROTOTYPE(rx3270version);
... ... @@ -119,7 +126,8 @@
119 126  
120 127 public:
121 128  
122   - rx3270();
  129 + rx3270(const char *local = REXX_DEFAULT_CHARSET, const char *remote = "ISO-8859-1");
  130 +
123 131 virtual ~rx3270();
124 132  
125 133 static rx3270 * create(const char *name = NULL);
... ...
src/plugins/rx3270/sample/remote.rex
... ... @@ -4,7 +4,15 @@ use arg uri
4 4 host = .rx3270~new("pw3270:a")
5 5  
6 6 say "PW3270 version is "||host~revision()
7   -say "Connections state is "||rx3270QueryCState()
  7 +say "Connection state is "||host~connected()
  8 +say "Ready state is "||host~ready()
  9 +
  10 +if uri <> "URI"
  11 + then say "Connect rc="||host~connect(uri)
  12 +
  13 +say "Wait for ready is "||host~WaitForReady(60)
  14 +
  15 +say "Text[3,2,27]="||host~GetTextAt(3,2,27)
8 16  
9 17 return 0
10 18  
... ...