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,6 +65,8 @@ | ||
| 65 | int cmp_text_at(int row, int col, const char *text); | 65 | int cmp_text_at(int row, int col, const char *text); |
| 66 | int set_text_at(int row, int col, const char *str); | 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 | int set_cursor_position(int row, int col); | 70 | int set_cursor_position(int row, int col); |
| 69 | 71 | ||
| 70 | void set_toggle(LIB3270_TOGGLE ix, bool value); | 72 | void set_toggle(LIB3270_TOGGLE ix, bool value); |
| @@ -934,3 +936,24 @@ void remote::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,3 +327,14 @@ RexxMethod4(logical_t, rx3270_method_test, CSELF, sessionPtr, CSTRING, key, int, | ||
| 327 | 327 | ||
| 328 | return false; | 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,5 +64,58 @@ | ||
| 64 | ::METHOD GETTEXTAT EXTERNAL "LIBRARY rx3270 rx3270_method_get_text_at" | 64 | ::METHOD GETTEXTAT EXTERNAL "LIBRARY rx3270 rx3270_method_get_text_at" |
| 65 | ::METHOD SETTEXTAT EXTERNAL "LIBRARY rx3270 rx3270_method_set_text_at" | 65 | ::METHOD SETTEXTAT EXTERNAL "LIBRARY rx3270 rx3270_method_set_text_at" |
| 66 | ::METHOD CMPTEXTAT EXTERNAL "LIBRARY rx3270 rx3270_method_cmp_text_at" | 66 | ::METHOD CMPTEXTAT EXTERNAL "LIBRARY rx3270 rx3270_method_cmp_text_at" |
| 67 | +::METHOD WAITFORTEXTAT EXTERNAL "LIBRARY rx3270 rx3270_method_wait_for_text_at" | ||
| 67 | ::METHOD TEST EXTERNAL "LIBRARY rx3270 rx3270_method_test" | 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,6 +104,7 @@ | ||
| 104 | REXX_METHOD_PROTOTYPE(rx3270_method_ds_trace); | 104 | REXX_METHOD_PROTOTYPE(rx3270_method_ds_trace); |
| 105 | REXX_METHOD_PROTOTYPE(rx3270_method_set_option); | 105 | REXX_METHOD_PROTOTYPE(rx3270_method_set_option); |
| 106 | REXX_METHOD_PROTOTYPE(rx3270_method_test); | 106 | REXX_METHOD_PROTOTYPE(rx3270_method_test); |
| 107 | + REXX_METHOD_PROTOTYPE(rx3270_method_wait_for_text_at); | ||
| 107 | 108 | ||
| 108 | /*---[ Globals ]---------------------------------------------------------------------------------------------*/ | 109 | /*---[ Globals ]---------------------------------------------------------------------------------------------*/ |
| 109 | 110 | ||
| @@ -154,6 +155,7 @@ | @@ -154,6 +155,7 @@ | ||
| 154 | virtual int iterate(bool wait = true) = 0; | 155 | virtual int iterate(bool wait = true) = 0; |
| 155 | virtual int wait(int seconds) = 0; | 156 | virtual int wait(int seconds) = 0; |
| 156 | virtual int wait_for_ready(int seconds) = 0; | 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 | virtual int set_cursor_position(int row, int col) = 0; | 159 | virtual int set_cursor_position(int row, int col) = 0; |
| 158 | virtual void set_toggle(LIB3270_TOGGLE ix, bool value) = 0; | 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,6 +110,8 @@ RexxRoutineEntry rx3270_functions[] = | ||
| 110 | REXX_TYPED_ROUTINE(rx3270queryStringAt, rx3270queryStringAt), | 110 | REXX_TYPED_ROUTINE(rx3270queryStringAt, rx3270queryStringAt), |
| 111 | REXX_TYPED_ROUTINE(rx3270SetStringAt, rx3270SetStringAt), | 111 | REXX_TYPED_ROUTINE(rx3270SetStringAt, rx3270SetStringAt), |
| 112 | 112 | ||
| 113 | + // rx3270Popup | ||
| 114 | + | ||
| 113 | REXX_LAST_METHOD() | 115 | REXX_LAST_METHOD() |
| 114 | }; | 116 | }; |
| 115 | 117 | ||
| @@ -137,6 +139,7 @@ RexxMethodEntry rx3270_methods[] = | @@ -137,6 +139,7 @@ RexxMethodEntry rx3270_methods[] = | ||
| 137 | REXX_METHOD(rx3270_method_ds_trace, rx3270_method_ds_trace ), | 139 | REXX_METHOD(rx3270_method_ds_trace, rx3270_method_ds_trace ), |
| 138 | REXX_METHOD(rx3270_method_set_option, rx3270_method_set_option ), | 140 | REXX_METHOD(rx3270_method_set_option, rx3270_method_set_option ), |
| 139 | REXX_METHOD(rx3270_method_test, rx3270_method_test ), | 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 | REXX_LAST_METHOD() | 144 | REXX_LAST_METHOD() |
| 142 | }; | 145 | }; |
| @@ -184,3 +187,21 @@ void rx3270::logva(const char *fmt, va_list args) | @@ -184,3 +187,21 @@ void rx3270::logva(const char *fmt, va_list args) | ||
| 184 | vfprintf(stderr,fmt,args); | 187 | vfprintf(stderr,fmt,args); |
| 185 | #endif | 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 | +} |