Commit 4f6698343ecec5634cc12966a72350d554f9aaf4

Authored by perry.werneck@gmail.com
1 parent 7b727cb5

Iniciando ajustes na extensão rexx para usar carga dinâmica igual à biblioteca de hllapi

src/plugins/rx3270/pluginmain.cc
@@ -28,18 +28,149 @@ @@ -28,18 +28,149 @@
28 */ 28 */
29 29
30 #include <pw3270/plugin.h> 30 #include <pw3270/plugin.h>
  31 + #include <lib3270/actions.h>
31 #include "rx3270.h" 32 #include "rx3270.h"
32 33
  34 +/*--[ Plugin session object ]--------------------------------------------------------------------------------*/
  35 +
  36 + class plugin : public rx3270
  37 + {
  38 + public:
  39 + plugin(H3270 *hSession);
  40 +
  41 + const char * get_version(void);
  42 + LIB3270_CSTATE get_cstate(void);
  43 + int disconnect(void);
  44 + int connect(const char *uri, bool wait = true);
  45 + int is_connected(void);
  46 + int is_ready(void);
  47 +
  48 + int iterate(void);
  49 + int wait(int seconds);
  50 + int wait_for_ready(int seconds);
  51 +
  52 + char * get_text_at(int row, int col, size_t sz);
  53 + int cmp_text_at(int row, int col, const char *text);
  54 + int set_text_at(int row, int col, const char *str);
  55 +
  56 + int set_cursor_position(int row, int col);
  57 +
  58 + int enter(void);
  59 + int pfkey(int key);
  60 + int pakey(int key);
  61 +
  62 + private:
  63 + H3270 *hSession;
  64 +
  65 + };
  66 +
  67 + static plugin * session = NULL;
  68 +
33 /*--[ Implement ]------------------------------------------------------------------------------------*/ 69 /*--[ Implement ]------------------------------------------------------------------------------------*/
34 70
35 LIB3270_EXPORT int pw3270_plugin_init(GtkWidget *window) 71 LIB3270_EXPORT int pw3270_plugin_init(GtkWidget *window)
36 { 72 {
37 - rx3270_set_mode(RX3270_MODE_PLUGIN); 73 + session = new plugin(lib3270_get_default_session_handle());
38 return 0; 74 return 0;
39 } 75 }
40 76
41 LIB3270_EXPORT int pw3270_plugin_deinit(GtkWidget *window) 77 LIB3270_EXPORT int pw3270_plugin_deinit(GtkWidget *window)
42 { 78 {
43 - rx3270_set_mode(RX3270_MODE_UNDEFINED); 79 + if(session)
  80 + {
  81 + delete session;
  82 + session = NULL;
  83 + }
  84 + return 0;
  85 + }
  86 +
  87 + plugin::plugin(H3270 *hSession) : rx3270()
  88 + {
  89 + this->hSession = hSession;
  90 + }
  91 +
  92 + const char * plugin::get_version(void)
  93 + {
  94 + return lib3270_get_version();
  95 + }
  96 +
  97 + LIB3270_CSTATE plugin::get_cstate(void)
  98 + {
  99 + return lib3270_get_connection_state(hSession);
  100 + }
  101 +
  102 + int plugin::disconnect(void)
  103 + {
  104 + lib3270_disconnect(hSession);
  105 + return 0;
  106 + }
  107 +
  108 + int plugin::connect(const char *uri, bool wait)
  109 + {
  110 + return lib3270_connect(hSession,uri,wait);
  111 + }
  112 +
  113 + int plugin::is_connected(void)
  114 + {
  115 + return lib3270_is_connected(hSession) ? 1 : 0;
  116 + }
  117 +
  118 + int plugin::iterate(void)
  119 + {
  120 + if(!lib3270_is_connected(hSession))
  121 + return ENOTCONN;
  122 +
  123 + lib3270_main_iterate(hSession,1);
  124 +
44 return 0; 125 return 0;
45 } 126 }
  127 +
  128 + int plugin::wait(int seconds)
  129 + {
  130 + return lib3270_wait(hSession,seconds);
  131 + }
  132 +
  133 + int plugin::enter(void)
  134 + {
  135 + return lib3270_enter(hSession);
  136 + }
  137 +
  138 + int plugin::pfkey(int key)
  139 + {
  140 + return lib3270_pfkey(hSession,key);
  141 + }
  142 +
  143 + int plugin::pakey(int key)
  144 + {
  145 + return lib3270_pakey(hSession,key);
  146 + }
  147 +
  148 + int plugin::wait_for_ready(int seconds)
  149 + {
  150 + return lib3270_wait_for_ready(hSession,seconds);
  151 + }
  152 +
  153 + char * plugin::get_text_at(int row, int col, size_t sz)
  154 + {
  155 + return lib3270_get_text_at(hSession,row,col,(int) sz);
  156 + }
  157 +
  158 + int plugin::cmp_text_at(int row, int col, const char *text)
  159 + {
  160 + return lib3270_cmp_text_at(hSession,row,col,text);
  161 + }
  162 +
  163 + int plugin::set_text_at(int row, int col, const char *str)
  164 + {
  165 + return lib3270_set_text_at(hSession,row,col,(const unsigned char *) str);
  166 + }
  167 +
  168 + int plugin::is_ready(void)
  169 + {
  170 + return lib3270_is_ready(hSession);
  171 + }
  172 +
  173 + int plugin::set_cursor_position(int row, int col)
  174 + {
  175 + return lib3270_set_cursor_position(hSession,row,col);
  176 + }
src/plugins/rx3270/rx3270.h
@@ -67,32 +67,58 @@ @@ -67,32 +67,58 @@
67 REXX_TYPED_ROUTINE_PROTOTYPE(rx3270WaitForStringAt); 67 REXX_TYPED_ROUTINE_PROTOTYPE(rx3270WaitForStringAt);
68 REXX_TYPED_ROUTINE_PROTOTYPE(rx3270GetStringAt); 68 REXX_TYPED_ROUTINE_PROTOTYPE(rx3270GetStringAt);
69 REXX_TYPED_ROUTINE_PROTOTYPE(rx3270IsTerminalReady); 69 REXX_TYPED_ROUTINE_PROTOTYPE(rx3270IsTerminalReady);
70 - REXX_TYPED_ROUTINE_PROTOTYPE(rx3270ReadScreen);  
71 REXX_TYPED_ROUTINE_PROTOTYPE(rx3270queryStringAt); 70 REXX_TYPED_ROUTINE_PROTOTYPE(rx3270queryStringAt);
72 REXX_TYPED_ROUTINE_PROTOTYPE(rx3270SetStringAt); 71 REXX_TYPED_ROUTINE_PROTOTYPE(rx3270SetStringAt);
73 72
74 /*---[ Globals ]---------------------------------------------------------------------------------------------*/ 73 /*---[ Globals ]---------------------------------------------------------------------------------------------*/
75 74
76 - enum rx3270mode  
77 - {  
78 - RX3270_MODE_STANDALONE, /**< Running outside pw3270's main process */  
79 - RX3270_MODE_PLUGIN, /**< Running inside pw3270's main process */  
80 -  
81 - RX3270_MODE_UNDEFINED  
82 - }; 75 +/*--[ 3270 Session ]-----------------------------------------------------------------------------------------*/
83 76
84 - #define RX3270SESSION lib3270_get_default_session_handle() 77 +#if defined (HAVE_GNUC_VISIBILITY)
  78 + class __attribute__((visibility("default"))) rx3270
  79 +#else
  80 + #error NOT_IMPLEMENTED
  81 +#endif
  82 + {
85 83
  84 + protected:
86 #ifdef HAVE_ICONV 85 #ifdef HAVE_ICONV
87 - extern iconv_t outputConv;  
88 - extern iconv_t inputConv; 86 + iconv_t conv2Local;
  87 + iconv_t conv2Host;
89 #endif 88 #endif
90 89
91 -/*--[ Prototipes ]-------------------------------------------------------------------------------------------*/ 90 + public:
  91 +
  92 + rx3270();
  93 + virtual ~rx3270();
  94 +
  95 + static rx3270 * get_default(void);
92 96
93 - char * get_contents(H3270 *hSession, int start, int sz);  
94 - char * set_contents(H3270 *hSession, const char *text); 97 + char * get_3270_string(const char *str);
  98 + char * get_local_string(const char *str);
95 99
96 - LIB3270_EXPORT void rx3270_set_mode(enum rx3270mode mode); 100 + virtual const char * get_version(void) = 0;
  101 + virtual LIB3270_CSTATE get_cstate(void) = 0;
  102 +
  103 + virtual int connect(const char *uri, bool wait = true) = 0;
  104 + virtual int disconnect(void) = 0;
  105 + virtual int is_connected(void) = 0;
  106 + virtual int is_ready(void) = 0;
  107 + virtual int iterate(void) = 0;
  108 + virtual int wait(int seconds) = 0;
  109 + virtual int wait_for_ready(int seconds) = 0;
  110 + virtual int set_cursor_position(int row, int col) = 0;
  111 +
  112 + virtual int enter(void) = 0;
  113 + virtual int pfkey(int key) = 0;
  114 + virtual int pakey(int key) = 0;
  115 +
  116 + virtual char * get_text_at(int row, int col, size_t sz) = 0;
  117 + virtual int cmp_text_at(int row, int col, const char *text) = 0;
  118 + virtual int set_text_at(int row, int col, const char *str) = 0;
  119 +
  120 +
  121 +
  122 + };
97 123
98 #endif // RX3270_H_INCLUDED 124 #endif // RX3270_H_INCLUDED
src/plugins/rx3270/rxapimain.cc
@@ -38,10 +38,6 @@ @@ -38,10 +38,6 @@
38 #include "rx3270.h" 38 #include "rx3270.h"
39 #include <lib3270/actions.h> 39 #include <lib3270/actions.h>
40 40
41 -#ifdef HAVE_ICONV  
42 - #include <iconv.h>  
43 -#endif  
44 -  
45 #include <string.h> 41 #include <string.h>
46 42
47 #if defined WIN32 43 #if defined WIN32
@@ -63,7 +59,7 @@ @@ -63,7 +59,7 @@
63 LIB3270_EXPORT RexxPackageEntry rx3270_package_entry; 59 LIB3270_EXPORT RexxPackageEntry rx3270_package_entry;
64 60
65 61
66 - static enum rx3270mode active_mode = RX3270_MODE_UNDEFINED; 62 + static rx3270 * hSession = NULL;
67 63
68 /*--[ Implement ]------------------------------------------------------------------------------------*/ 64 /*--[ Implement ]------------------------------------------------------------------------------------*/
69 65
@@ -86,36 +82,15 @@ BOOL WINAPI DllMain(HANDLE hinst, DWORD dwcallpurpose, LPVOID lpvResvd) @@ -86,36 +82,15 @@ BOOL WINAPI DllMain(HANDLE hinst, DWORD dwcallpurpose, LPVOID lpvResvd)
86 } 82 }
87 #endif 83 #endif
88 84
89 -void rx3270_set_mode(enum rx3270mode mode)  
90 -{  
91 - active_mode = mode;  
92 -}  
93 -  
94 int librx3270_loaded(void) 85 int librx3270_loaded(void)
95 { 86 {
96 - active_mode = RX3270_MODE_STANDALONE;  
97 -  
98 -#ifdef HAVE_ICONV  
99 - outputConv = iconv_open(REXX_DEFAULT_CHARSET, lib3270_get_default_charset());  
100 - inputConv = iconv_open(lib3270_get_default_charset(), REXX_DEFAULT_CHARSET);  
101 -#endif  
102 -  
103 return 0; 87 return 0;
104 } 88 }
105 89
106 int librx3270_unloaded(void) 90 int librx3270_unloaded(void)
107 { 91 {
108 - active_mode = RX3270_MODE_UNDEFINED;  
109 -  
110 -#ifdef HAVE_ICONV  
111 -  
112 - if(outputConv != (iconv_t) (-1))  
113 - iconv_close(outputConv);  
114 -  
115 - if(inputConv != (iconv_t) (-1))  
116 - iconv_close(inputConv);  
117 -#endif  
118 - 92 + if(hSession)
  93 + delete hSession;
119 return 0; 94 return 0;
120 } 95 }
121 96
@@ -136,7 +111,6 @@ RexxRoutineEntry rx3270_functions[] = @@ -136,7 +111,6 @@ RexxRoutineEntry rx3270_functions[] =
136 REXX_TYPED_ROUTINE(rx3270WaitForStringAt, rx3270WaitForStringAt), 111 REXX_TYPED_ROUTINE(rx3270WaitForStringAt, rx3270WaitForStringAt),
137 REXX_TYPED_ROUTINE(rx3270GetStringAt, rx3270GetStringAt), 112 REXX_TYPED_ROUTINE(rx3270GetStringAt, rx3270GetStringAt),
138 REXX_TYPED_ROUTINE(rx3270IsTerminalReady, rx3270IsTerminalReady), 113 REXX_TYPED_ROUTINE(rx3270IsTerminalReady, rx3270IsTerminalReady),
139 - REXX_TYPED_ROUTINE(rx3270ReadScreen, rx3270ReadScreen),  
140 REXX_TYPED_ROUTINE(rx3270queryStringAt, rx3270queryStringAt), 114 REXX_TYPED_ROUTINE(rx3270queryStringAt, rx3270queryStringAt),
141 REXX_TYPED_ROUTINE(rx3270SetStringAt, rx3270SetStringAt), 115 REXX_TYPED_ROUTINE(rx3270SetStringAt, rx3270SetStringAt),
142 116
@@ -168,4 +142,35 @@ LIB3270_EXPORT RexxPackageEntry * RexxEntry RexxGetPackage(void) @@ -168,4 +142,35 @@ LIB3270_EXPORT RexxPackageEntry * RexxEntry RexxGetPackage(void)
168 END_EXTERN_C() 142 END_EXTERN_C()
169 143
170 144
  145 +rx3270 * rx3270::get_default(void)
  146 +{
  147 + return hSession;
  148 +}
  149 +
  150 +rx3270::rx3270()
  151 +{
  152 +#ifdef HAVE_ICONV
  153 + this->conv2Local = iconv_open(REXX_DEFAULT_CHARSET, "ISO-8859-1");
  154 + this->conv2Host = iconv_open("ISO-8859-1",REXX_DEFAULT_CHARSET);
  155 +#endif
  156 +
  157 + if(!hSession)
  158 + hSession = this;
  159 +}
  160 +
  161 +rx3270::~rx3270()
  162 +{
  163 +#ifdef HAVE_ICONV
  164 +
  165 + if(conv2Local != (iconv_t) (-1))
  166 + iconv_close(conv2Local);
  167 +
  168 + if(conv2Host != (iconv_t) (-1))
  169 + iconv_close(conv2Host);
  170 +#endif
  171 +
  172 +
  173 + if(hSession == this)
  174 + hSession = NULL;
  175 +}
171 176
src/plugins/rx3270/text.cc
@@ -32,27 +32,12 @@ @@ -32,27 +32,12 @@
32 32
33 #include <string.h> 33 #include <string.h>
34 34
35 -  
36 -/*--[ Globals ]--------------------------------------------------------------------------------------*/  
37 -  
38 -#ifdef HAVE_ICONV  
39 - iconv_t outputConv = (iconv_t) (-1);  
40 - iconv_t inputConv = (iconv_t) (-1);  
41 -#endif  
42 -  
43 /*--[ Implement ]------------------------------------------------------------------------------------*/ 35 /*--[ Implement ]------------------------------------------------------------------------------------*/
44 36
45 -char * get_contents(H3270 *hSession, int start, int sz) 37 +char * rx3270::get_3270_string(const char *str)
46 { 38 {
47 - unsigned char str[sz+1];  
48 - unsigned short attr[sz+1];  
49 -  
50 - if(!lib3270_get_contents(hSession,start,start+sz,str,attr))  
51 - return NULL;  
52 -  
53 #ifdef HAVE_ICONV 39 #ifdef HAVE_ICONV
54 - // Convert received string to rexx encoding  
55 - if(outputConv != (iconv_t)(-1)) 40 + if(conv2Host != (iconv_t)(-1))
56 { 41 {
57 size_t in = strlen((char *) str); 42 size_t in = strlen((char *) str);
58 size_t out = (in << 1); 43 size_t out = (in << 1);
@@ -62,9 +47,9 @@ char * get_contents(H3270 *hSession, int start, int sz) @@ -62,9 +47,9 @@ char * get_contents(H3270 *hSession, int start, int sz)
62 47
63 memset(ptr=buffer,0,out); 48 memset(ptr=buffer,0,out);
64 49
65 - iconv(outputConv,NULL,NULL,NULL,NULL); // Reset state 50 + iconv(conv2Host,NULL,NULL,NULL,NULL); // Reset state
66 51
67 - if(iconv(outputConv,(char **) &str,&in,&ptr,&out) == ((size_t) -1)) 52 + if(iconv(conv2Host,(char **) &str,&in,&ptr,&out) == ((size_t) -1))
68 ret = strdup((char *) str); 53 ret = strdup((char *) str);
69 else 54 else
70 ret = strdup(buffer); 55 ret = strdup(buffer);
@@ -73,30 +58,28 @@ char * get_contents(H3270 *hSession, int start, int sz) @@ -73,30 +58,28 @@ char * get_contents(H3270 *hSession, int start, int sz)
73 58
74 return ret; 59 return ret;
75 } 60 }
76 -  
77 #endif // HAVE_ICONV 61 #endif // HAVE_ICONV
78 62
79 - return strdup((char *) str); 63 + return strdup(str);
80 } 64 }
81 65
82 -char * set_contents(H3270 *hSession, const char *str) 66 +char * rx3270::get_local_string(const char *str)
83 { 67 {
84 #ifdef HAVE_ICONV 68 #ifdef HAVE_ICONV
85 - // Convert received string to 3270 encoding  
86 - if(inputConv != (iconv_t)(-1)) 69 + if(conv2Local != (iconv_t)(-1))
87 { 70 {
88 - size_t in = strlen(str);  
89 - size_t out = (in << 1);  
90 - char * ptr;  
91 - char * buffer = (char *) malloc(out);  
92 - char * ret; 71 + size_t in = strlen((char *) str);
  72 + size_t out = (in << 1);
  73 + char *ptr;
  74 + char *buffer = (char *) malloc(out);
  75 + char *ret;
93 76
94 memset(ptr=buffer,0,out); 77 memset(ptr=buffer,0,out);
95 78
96 - iconv(inputConv,NULL,NULL,NULL,NULL); // Reset state 79 + iconv(conv2Local,NULL,NULL,NULL,NULL); // Reset state
97 80
98 - if(iconv(inputConv,(char **) &str,&in,&ptr,&out) == ((size_t) -1))  
99 - ret = strdup(str); 81 + if(iconv(conv2Local,(char **) &str,&in,&ptr,&out) == ((size_t) -1))
  82 + ret = strdup((char *) str);
100 else 83 else
101 ret = strdup(buffer); 84 ret = strdup(buffer);
102 85
@@ -106,8 +89,7 @@ char * set_contents(H3270 *hSession, const char *str) @@ -106,8 +89,7 @@ char * set_contents(H3270 *hSession, const char *str)
106 } 89 }
107 #endif // HAVE_ICONV 90 #endif // HAVE_ICONV
108 91
109 - return strdup((char *) str);  
110 - 92 + return strdup(str);
111 } 93 }
112 94
113 95
src/plugins/rx3270/typed_routines.cc
@@ -31,14 +31,13 @@ @@ -31,14 +31,13 @@
31 #include <string.h> 31 #include <string.h>
32 32
33 #include "rx3270.h" 33 #include "rx3270.h"
34 - #include <lib3270/actions.h>  
35 34
36 35
37 /*--[ Implement ]------------------------------------------------------------------------------------*/ 36 /*--[ Implement ]------------------------------------------------------------------------------------*/
38 37
39 RexxRoutine0(CSTRING, rx3270version) 38 RexxRoutine0(CSTRING, rx3270version)
40 { 39 {
41 - return lib3270_get_version(); 40 + return rx3270::get_default()->get_version();
42 } 41 }
43 42
44 RexxRoutine0(CSTRING, rx3270QueryCState) 43 RexxRoutine0(CSTRING, rx3270QueryCState)
@@ -64,9 +63,7 @@ RexxRoutine0(CSTRING, rx3270QueryCState) @@ -64,9 +63,7 @@ RexxRoutine0(CSTRING, rx3270QueryCState)
64 }; 63 };
65 64
66 size_t f; 65 size_t f;
67 - LIB3270_CSTATE state;  
68 -  
69 - state = lib3270_get_connection_state(RX3270SESSION); 66 + LIB3270_CSTATE state = rx3270::get_default()->get_cstate();
70 67
71 for(f=0;f < (sizeof(xlat_state)/sizeof(struct _xlat_state)); f++) 68 for(f=0;f < (sizeof(xlat_state)/sizeof(struct _xlat_state)); f++)
72 { 69 {
@@ -79,112 +76,84 @@ RexxRoutine0(CSTRING, rx3270QueryCState) @@ -79,112 +76,84 @@ RexxRoutine0(CSTRING, rx3270QueryCState)
79 76
80 RexxRoutine0(int, rx3270Disconnect) 77 RexxRoutine0(int, rx3270Disconnect)
81 { 78 {
82 - lib3270_disconnect(RX3270SESSION);  
83 - return 0; 79 + return rx3270::get_default()->disconnect();
84 } 80 }
85 81
86 RexxRoutine2(int, rx3270Connect, CSTRING, hostname, int, wait) 82 RexxRoutine2(int, rx3270Connect, CSTRING, hostname, int, wait)
87 { 83 {
88 - return lib3270_connect(RX3270SESSION, hostname, wait); 84 + return rx3270::get_default()->connect(hostname,wait);
89 } 85 }
90 86
91 RexxRoutine0(int, rx3270isConnected) 87 RexxRoutine0(int, rx3270isConnected)
92 { 88 {
93 - return lib3270_is_connected(RX3270SESSION) ? 1 : 0; 89 + return rx3270::get_default()->is_connected();
94 } 90 }
95 91
96 RexxRoutine0(int, rx3270WaitForEvents) 92 RexxRoutine0(int, rx3270WaitForEvents)
97 { 93 {
98 - H3270 * hSession = RX3270SESSION;  
99 -  
100 - if(!lib3270_is_connected(hSession))  
101 - return ENOTCONN;  
102 -  
103 - lib3270_main_iterate(hSession,1);  
104 -  
105 - return 0; 94 + return rx3270::get_default()->iterate();
106 } 95 }
107 96
108 RexxRoutine1(int, rx3270Sleep, int, seconds) 97 RexxRoutine1(int, rx3270Sleep, int, seconds)
109 { 98 {
110 - return lib3270_wait(RX3270SESSION,seconds); 99 + return rx3270::get_default()->wait(seconds);
111 } 100 }
112 101
113 RexxRoutine0(int, rx3270SendENTERKey) 102 RexxRoutine0(int, rx3270SendENTERKey)
114 { 103 {
115 - return lib3270_enter(RX3270SESSION); 104 + return rx3270::get_default()->enter();
116 } 105 }
117 106
118 RexxRoutine1(int, rx3270SendPFKey, int, key) 107 RexxRoutine1(int, rx3270SendPFKey, int, key)
119 { 108 {
120 - return lib3270_pfkey(RX3270SESSION,key); 109 + return rx3270::get_default()->pfkey(key);
121 } 110 }
122 111
123 RexxRoutine1(int, rx3270SendPAKey, int, key) 112 RexxRoutine1(int, rx3270SendPAKey, int, key)
124 { 113 {
125 - return lib3270_pakey(RX3270SESSION,key); 114 + return rx3270::get_default()->pakey(key);
126 } 115 }
127 116
128 RexxRoutine1(int, rx3270WaitForTerminalReady, int, seconds) 117 RexxRoutine1(int, rx3270WaitForTerminalReady, int, seconds)
129 { 118 {
130 - return lib3270_wait_for_ready(RX3270SESSION,seconds); 119 + return rx3270::get_default()->wait_for_ready(seconds);
131 } 120 }
132 121
133 RexxRoutine4(int, rx3270WaitForStringAt, int, row, int, col, CSTRING, key, int, timeout) 122 RexxRoutine4(int, rx3270WaitForStringAt, int, row, int, col, CSTRING, key, int, timeout)
134 { 123 {
135 - H3270 * hSession = RX3270SESSION; 124 + rx3270 * session = rx3270::get_default();
136 time_t end = time(0) + timeout; 125 time_t end = time(0) + timeout;
137 - int sz = strlen(key);  
138 - int rows;  
139 - int cols;  
140 - int start;  
141 -  
142 - lib3270_get_screen_size(hSession,&rows,&cols);  
143 -  
144 - if(row < 0 || row > rows || col < 0 || col > cols)  
145 - return EINVAL;  
146 -  
147 - start = ((row) * cols) + col; 126 + char * text = session->get_3270_string(key);
148 127
149 while(time(0) < end) 128 while(time(0) < end)
150 { 129 {
151 - if(!lib3270_is_connected(hSession)) 130 + if(!session->is_connected())
152 { 131 {
153 return ENOTCONN; 132 return ENOTCONN;
154 } 133 }
155 - else if(lib3270_is_ready(hSession)) 134 + else if( !(session->wait_for_ready(1) || session->cmp_text_at(row,col,text)) )
156 { 135 {
157 - char *buffer = get_contents(hSession, start, start+sz);  
158 - if(buffer)  
159 - {  
160 - int rc = strncasecmp((const char *) buffer,key,sz);  
161 - free(buffer);  
162 - if(rc == 0)  
163 - return 0;  
164 - } 136 + free(text);
  137 + return 0;
165 } 138 }
166 -  
167 - lib3270_main_iterate(hSession,1);  
168 -  
169 } 139 }
170 140
  141 + free(text);
  142 +
171 return ETIMEDOUT; 143 return ETIMEDOUT;
172 144
173 } 145 }
174 146
175 RexxRoutine3(RexxStringObject, rx3270GetStringAt, int, row, int, col, int, sz) 147 RexxRoutine3(RexxStringObject, rx3270GetStringAt, int, row, int, col, int, sz)
176 { 148 {
177 - H3270 * hSession = RX3270SESSION;  
178 - int rows;  
179 - int cols;  
180 - char * text;  
181 -  
182 - lib3270_get_screen_size(hSession,&rows,&cols); 149 + rx3270 * session = rx3270::get_default();
  150 + char * str = session->get_text_at(row,col,sz);
183 151
184 - text = get_contents(hSession, ((row) * cols) + col, sz);  
185 - if(text) 152 + if(str)
186 { 153 {
187 - RexxStringObject ret = context->String((CSTRING) text); 154 + char * text = session->get_local_string(str);
  155 + RexxStringObject ret = context->String((CSTRING) text);
  156 + free(str);
188 free(text); 157 free(text);
189 return ret; 158 return ret;
190 } 159 }
@@ -194,102 +163,42 @@ RexxRoutine3(RexxStringObject, rx3270GetStringAt, int, row, int, col, int, sz) @@ -194,102 +163,42 @@ RexxRoutine3(RexxStringObject, rx3270GetStringAt, int, row, int, col, int, sz)
194 163
195 RexxRoutine0(int, rx3270IsTerminalReady) 164 RexxRoutine0(int, rx3270IsTerminalReady)
196 { 165 {
197 - return lib3270_is_ready(RX3270SESSION);  
198 -}  
199 -  
200 -RexxRoutine3(RexxStringObject, rx3270ReadScreen, OPTIONAL_int, row, OPTIONAL_int, col, OPTIONAL_int, sz)  
201 -{  
202 - H3270 * hSession = RX3270SESSION;  
203 - int rows;  
204 - int cols;  
205 - char * text;  
206 - int start;  
207 -  
208 - lib3270_get_screen_size(hSession,&rows,&cols);  
209 -  
210 - start = (row * cols) + col;  
211 -  
212 - if(sz == 0)  
213 - sz = (rows*cols) - start;  
214 -  
215 - text = get_contents(hSession, start, sz);  
216 - if(text)  
217 - {  
218 - RexxStringObject ret = context->String((CSTRING) text);  
219 - free(text);  
220 - return ret;  
221 - }  
222 -  
223 - return context->String(""); 166 + return rx3270::get_default()->is_ready();
224 } 167 }
225 168
226 RexxRoutine3(int, rx3270queryStringAt, int, row, int, col, CSTRING, key) 169 RexxRoutine3(int, rx3270queryStringAt, int, row, int, col, CSTRING, key)
227 { 170 {
228 - H3270 * hSession = RX3270SESSION;  
229 - int rows;  
230 - int cols;  
231 - char * text;  
232 - size_t sz = strlen(key);  
233 -  
234 - lib3270_get_screen_size(hSession,&rows,&cols); 171 + int rc = 0;
  172 + rx3270 * session = rx3270::get_default();
  173 + char * str = session->get_text_at(row,col,strlen(key));
235 174
236 - text = get_contents(hSession, (row * cols) + col, sz);  
237 - if(text) 175 + if(str)
238 { 176 {
239 - int rc = strncasecmp(text,key,sz); 177 + char * text = session->get_3270_string(key);
  178 + rc = strcasecmp(str,text);
240 free(text); 179 free(text);
241 - return rc;  
242 } 180 }
243 181
244 - return 0; 182 + free(str);
  183 +
  184 + return rc;
245 } 185 }
246 186
247 RexxRoutine2(int, rx3270SetCursorPosition, int, row, int, col) 187 RexxRoutine2(int, rx3270SetCursorPosition, int, row, int, col)
248 { 188 {
249 - return lib3270_set_cursor_position(RX3270SESSION,row,col); 189 + return rx3270::get_default()->set_cursor_position(row,col);
250 } 190 }
251 191
252 RexxRoutine3(int, rx3270SetStringAt, int, row, int, col, CSTRING, text) 192 RexxRoutine3(int, rx3270SetStringAt, int, row, int, col, CSTRING, text)
253 { 193 {
  194 + rx3270 * session = rx3270::get_default();
  195 + char * str = session->get_3270_string(text);
254 int rc; 196 int rc;
255 - H3270 * hSession = RX3270SESSION;  
256 - char * str = set_contents(hSession,text);  
257 197
258 - if(str)  
259 - rc = lib3270_set_string_at(hSession,row,col,(const unsigned char *) str);  
260 - else  
261 - rc = -1; 198 + rc = session->set_text_at(row,col,str);
262 199
263 free(str); 200 free(str);
264 201
265 return rc; 202 return rc;
266 } 203 }
267 204
268 -/*  
269 -::method RunMode  
270 -return rx3270QueryRunMode()  
271 -  
272 -::method 'encoding='  
273 - use arg ptr  
274 -return rx3270SetCharset(ptr)  
275 -  
276 -::method sendfile  
277 - use arg from, tostrncasecmp  
278 -  
279 - status = rx3270BeginFileSend(from,to)  
280 - if status <> 0  
281 - then return status  
282 -  
283 -return rx3270WaitForFTComplete()  
284 -  
285 -::method recvfile  
286 - use arg from, to  
287 -  
288 - status = rx3270BeginFileRecv(from,to)  
289 - if status <> 0  
290 - then return status  
291 -  
292 -return rx3270WaitForFTComplete()  
293 -*/  
294 -  
295 -