Commit 579ad177500e6b9c572e73c49351384cc620dbce
1 parent
5447289d
Exists in
master
and in
5 other branches
Implementando metodos rexx iguais aos da API antiga
Showing
5 changed files
with
110 additions
and
0 deletions
Show diff stats
src/plugins/rx3270/remote.cc
... | ... | @@ -65,6 +65,8 @@ |
65 | 65 | int cmp_text_at(int row, int col, const char *text); |
66 | 66 | int set_text_at(int row, int col, const char *str); |
67 | 67 | |
68 | + int wait_for_text_at(int row, int col, const char *key, int timeout); | |
69 | + | |
68 | 70 | int set_cursor_position(int row, int col); |
69 | 71 | |
70 | 72 | void set_toggle(LIB3270_TOGGLE ix, bool value); |
... | ... | @@ -934,3 +936,24 @@ void remote::set_toggle(LIB3270_TOGGLE ix, bool value) |
934 | 936 | |
935 | 937 | } |
936 | 938 | |
939 | +int remote::wait_for_text_at(int row, int col, const char *key, int timeout) | |
940 | +{ | |
941 | + time_t end = time(0)+timeout; | |
942 | + | |
943 | + while(time(0) < end) | |
944 | + { | |
945 | + if(!is_connected()) | |
946 | + return ENOTCONN; | |
947 | + | |
948 | + if(!cmp_text_at(row,col,key)) | |
949 | + return 0; | |
950 | + | |
951 | +#ifdef WIN32 | |
952 | + Sleep(500); | |
953 | +#else | |
954 | + usleep(500); | |
955 | +#endif | |
956 | + } | |
957 | + | |
958 | + return ETIMEDOUT; | |
959 | +} | ... | ... |
src/plugins/rx3270/rexx_methods.cc
... | ... | @@ -327,3 +327,14 @@ RexxMethod4(logical_t, rx3270_method_test, CSELF, sessionPtr, CSTRING, key, int, |
327 | 327 | |
328 | 328 | return false; |
329 | 329 | } |
330 | + | |
331 | +RexxMethod5(int, rx3270_method_wait_for_text_at, CSELF, sessionPtr, int, row, int, col, CSTRING, key, int, timeout) | |
332 | +{ | |
333 | + rx3270 * hSession = (rx3270 *) sessionPtr; | |
334 | + | |
335 | + if(hSession) | |
336 | + return hSession->wait_for_text_at(row,col,key,timeout); | |
337 | + | |
338 | + return -1; | |
339 | +} | |
340 | + | ... | ... |
src/plugins/rx3270/rx3270.cls
... | ... | @@ -64,5 +64,58 @@ |
64 | 64 | ::METHOD GETTEXTAT EXTERNAL "LIBRARY rx3270 rx3270_method_get_text_at" |
65 | 65 | ::METHOD SETTEXTAT EXTERNAL "LIBRARY rx3270 rx3270_method_set_text_at" |
66 | 66 | ::METHOD CMPTEXTAT EXTERNAL "LIBRARY rx3270 rx3270_method_cmp_text_at" |
67 | +::METHOD WAITFORTEXTAT EXTERNAL "LIBRARY rx3270 rx3270_method_wait_for_text_at" | |
67 | 68 | ::METHOD TEST EXTERNAL "LIBRARY rx3270 rx3270_method_test" |
68 | 69 | |
70 | +/* | |
71 | +getConnectionState | |
72 | +waitForEvents | |
73 | +getScreenContent | |
74 | +RunMode | |
75 | + | |
76 | +::method isConnected | |
77 | +return self~getConnectionState() = "CONNECTED_TN3270E" | |
78 | + | |
79 | +::method waitForStringAt | |
80 | + use arg row, col, key, timeout | |
81 | + if datatype(timeout) <> "NUM" | |
82 | + then timeout = 60 | |
83 | +return self~WaitForTextAt(row,col,key,timeout) | |
84 | + | |
85 | +*/ | |
86 | + | |
87 | +::method queryStringAt | |
88 | + use arg row, col, key | |
89 | +return self~GetTextAt(row,col,length(key)) == key | |
90 | + | |
91 | +::method waitForTerminalReady | |
92 | + use arg timeout | |
93 | +return self~WaitForReady(timeout) | |
94 | + | |
95 | +::method isTerminalReady | |
96 | +return self~ready() | |
97 | + | |
98 | +::method setStringAt | |
99 | + use arg row, col, str | |
100 | +return self~SetTextAt(row,col,str) | |
101 | + | |
102 | +::method getStringAt | |
103 | + use arg row, col, size | |
104 | +return self~GetTextAt(row,col,size) | |
105 | + | |
106 | +::method sendEnterKey | |
107 | +return self~Enter() | |
108 | + | |
109 | +::method sendPFKey | |
110 | + use arg key | |
111 | +return self~pfKey(key) | |
112 | + | |
113 | +::method setCursorPosition | |
114 | + use arg row, col | |
115 | +return self~SetCursor(row,col) | |
116 | + | |
117 | +::method getScreenContentAt | |
118 | + use arg row, col, size | |
119 | +return self~GetTextAt(row,col,size) | |
120 | + | |
121 | + | ... | ... |
src/plugins/rx3270/rx3270.h
... | ... | @@ -104,6 +104,7 @@ |
104 | 104 | REXX_METHOD_PROTOTYPE(rx3270_method_ds_trace); |
105 | 105 | REXX_METHOD_PROTOTYPE(rx3270_method_set_option); |
106 | 106 | REXX_METHOD_PROTOTYPE(rx3270_method_test); |
107 | + REXX_METHOD_PROTOTYPE(rx3270_method_wait_for_text_at); | |
107 | 108 | |
108 | 109 | /*---[ Globals ]---------------------------------------------------------------------------------------------*/ |
109 | 110 | |
... | ... | @@ -154,6 +155,7 @@ |
154 | 155 | virtual int iterate(bool wait = true) = 0; |
155 | 156 | virtual int wait(int seconds) = 0; |
156 | 157 | virtual int wait_for_ready(int seconds) = 0; |
158 | + virtual int wait_for_text_at(int row, int col, const char *key, int timeout); | |
157 | 159 | virtual int set_cursor_position(int row, int col) = 0; |
158 | 160 | virtual void set_toggle(LIB3270_TOGGLE ix, bool value) = 0; |
159 | 161 | ... | ... |
src/plugins/rx3270/rxapimain.cc
... | ... | @@ -110,6 +110,8 @@ RexxRoutineEntry rx3270_functions[] = |
110 | 110 | REXX_TYPED_ROUTINE(rx3270queryStringAt, rx3270queryStringAt), |
111 | 111 | REXX_TYPED_ROUTINE(rx3270SetStringAt, rx3270SetStringAt), |
112 | 112 | |
113 | + // rx3270Popup | |
114 | + | |
113 | 115 | REXX_LAST_METHOD() |
114 | 116 | }; |
115 | 117 | |
... | ... | @@ -137,6 +139,7 @@ RexxMethodEntry rx3270_methods[] = |
137 | 139 | REXX_METHOD(rx3270_method_ds_trace, rx3270_method_ds_trace ), |
138 | 140 | REXX_METHOD(rx3270_method_set_option, rx3270_method_set_option ), |
139 | 141 | REXX_METHOD(rx3270_method_test, rx3270_method_test ), |
142 | + REXX_METHOD(rx3270_method_wait_for_text_at, rx3270_method_wait_for_text_at ), | |
140 | 143 | |
141 | 144 | REXX_LAST_METHOD() |
142 | 145 | }; |
... | ... | @@ -184,3 +187,21 @@ void rx3270::logva(const char *fmt, va_list args) |
184 | 187 | vfprintf(stderr,fmt,args); |
185 | 188 | #endif |
186 | 189 | } |
190 | + | |
191 | +int rx3270::wait_for_text_at(int row, int col, const char *key, int timeout) | |
192 | +{ | |
193 | + time_t end = time(0)+timeout; | |
194 | + | |
195 | + while(time(0) < end) | |
196 | + { | |
197 | + if(!is_connected()) | |
198 | + return ENOTCONN; | |
199 | + | |
200 | + if(!cmp_text_at(row,col,key)) | |
201 | + return 0; | |
202 | + | |
203 | + iterate(); | |
204 | + } | |
205 | + | |
206 | + return ETIMEDOUT; | |
207 | +} | ... | ... |