Commit cb71f196ea8beac915b98a9f3d63598a90294b97
1 parent
9ae530d5
Exists in
master
and in
5 other branches
Implementando tratamento de LF nas capturas de conteúdo.
Showing
10 changed files
with
44 additions
and
31 deletions
Show diff stats
src/include/lib3270.h
... | ... | @@ -921,11 +921,12 @@ |
921 | 921 | * @param row Desired row. |
922 | 922 | * @param col Desired col. |
923 | 923 | * @param length Text length |
924 | + * @param lf Line break char (0 to disable line breaks). | |
924 | 925 | * |
925 | 926 | * @return Contents at position if available, or NULL. Release it with lib3270_free() |
926 | 927 | * |
927 | 928 | */ |
928 | - LIB3270_EXPORT char * lib3270_get_text_at(H3270 *h, int row, int col, int len); | |
929 | + LIB3270_EXPORT char * lib3270_get_text_at(H3270 *h, int row, int col, int len, char lf); | |
929 | 930 | |
930 | 931 | /** |
931 | 932 | * Check for text at requested position |
... | ... | @@ -934,11 +935,12 @@ |
934 | 935 | * @param row Desired row. |
935 | 936 | * @param col Desired col. |
936 | 937 | * @param text Text to check. |
938 | + * @param lf Line break char (0 to disable line breaks). | |
937 | 939 | * |
938 | 940 | * @return Test result from strcmp |
939 | 941 | * |
940 | 942 | */ |
941 | - LIB3270_EXPORT int lib3270_cmp_text_at(H3270 *h, int row, int col, const char *text); | |
943 | + LIB3270_EXPORT int lib3270_cmp_text_at(H3270 *h, int row, int col, const char *text, char lf); | |
942 | 944 | |
943 | 945 | |
944 | 946 | /** | ... | ... |
src/include/pw3270/ipcpackets.h
... | ... | @@ -141,6 +141,7 @@ struct hllapi_packet_text_at |
141 | 141 | unsigned char packet_id; |
142 | 142 | unsigned short row; |
143 | 143 | unsigned short col; |
144 | + char lf; | |
144 | 145 | char text[1]; |
145 | 146 | }; |
146 | 147 | |
... | ... | @@ -150,6 +151,7 @@ struct hllapi_packet_query_at |
150 | 151 | unsigned short row; |
151 | 152 | unsigned short col; |
152 | 153 | unsigned short len; |
154 | + char lf; | |
153 | 155 | }; |
154 | 156 | |
155 | 157 | struct hllapi_packet_wait | ... | ... |
src/include/pw3270cpp.h
... | ... | @@ -274,11 +274,11 @@ |
274 | 274 | session(); |
275 | 275 | |
276 | 276 | // Get/Set/Test without charset translation |
277 | - virtual string get_text(int baddr = 0, size_t len = 1, bool lf = false) = 0; | |
278 | - virtual string get_text_at(int row, int col, size_t sz) = 0; | |
279 | - virtual int set_text_at(int row, int col, const char *str) = 0; | |
280 | - virtual int cmp_text_at(int row, int col, const char *text) = 0; | |
281 | - virtual int emulate_input(const char *str) = 0; | |
277 | + virtual string get_text(int baddr = 0, size_t len = 1, bool lf = false) = 0; | |
278 | + virtual string get_text_at(int row, int col, size_t sz, bool lf = false) = 0; | |
279 | + virtual int set_text_at(int row, int col, const char *str) = 0; | |
280 | + virtual int cmp_text_at(int row, int col, const char *text, bool lf = false) = 0; | |
281 | + virtual int emulate_input(const char *str) = 0; | |
282 | 282 | virtual int wait_for_text_at(int row, int col, const char *key, int timeout); |
283 | 283 | |
284 | 284 | private: | ... | ... |
src/lib3270/selection.c
... | ... | @@ -530,19 +530,19 @@ LIB3270_EXPORT char * lib3270_get_text(H3270 *h, int offset, int len, char lf) |
530 | 530 | return buffer; |
531 | 531 | } |
532 | 532 | |
533 | -LIB3270_EXPORT char * lib3270_get_text_at(H3270 *h, int row, int col, int len) | |
533 | +LIB3270_EXPORT char * lib3270_get_text_at(H3270 *h, int row, int col, int len, char lf) | |
534 | 534 | { |
535 | 535 | CHECK_SESSION_HANDLE(h); |
536 | - return lib3270_get_text(h, ((row-1) * h->cols) + (col-1), len, '\n'); | |
536 | + return lib3270_get_text(h, ((row-1) * h->cols) + (col-1), len, lf); | |
537 | 537 | } |
538 | 538 | |
539 | -LIB3270_EXPORT int lib3270_cmp_text_at(H3270 *h, int row, int col, const char *text) | |
539 | +LIB3270_EXPORT int lib3270_cmp_text_at(H3270 *h, int row, int col, const char *text, char lf) | |
540 | 540 | { |
541 | 541 | int rc; |
542 | 542 | size_t sz = strlen(text); |
543 | 543 | char * contents; |
544 | 544 | |
545 | - contents = lib3270_get_text_at(h,row,col,sz); | |
545 | + contents = lib3270_get_text_at(h,row,col,sz,lf); | |
546 | 546 | if(!contents) |
547 | 547 | return -1; |
548 | 548 | ... | ... |
src/libpw3270cpp/local.cc
... | ... | @@ -138,8 +138,8 @@ |
138 | 138 | int (*_pakey)(H3270 *hSession, int key); |
139 | 139 | int (*_wait_for_ready)(H3270 *hSession, int seconds); |
140 | 140 | char * (*_get_text)(H3270 *h, int offset, int len, char lf); |
141 | - char * (*_get_text_at)(H3270 *h, int row, int col, int len); | |
142 | - int (*_cmp_text_at)(H3270 *h, int row, int col, const char *text); | |
141 | + char * (*_get_text_at)(H3270 *h, int row, int col, int len, char lf); | |
142 | + int (*_cmp_text_at)(H3270 *h, int row, int col, const char *text, char lf); | |
143 | 143 | int (*_set_text_at)(H3270 *h, int row, int col, const unsigned char *str); |
144 | 144 | int (*_is_ready)(H3270 *h); |
145 | 145 | int (*_set_cursor_position)(H3270 *h, int row, int col); |
... | ... | @@ -353,10 +353,10 @@ |
353 | 353 | return 0; |
354 | 354 | } |
355 | 355 | |
356 | - string get_text_at(int row, int col, size_t sz) | |
356 | + string get_text_at(int row, int col, size_t sz, bool lf) | |
357 | 357 | { |
358 | 358 | string rc; |
359 | - char * ptr = _get_text_at(hSession,row,col,sz); | |
359 | + char * ptr = _get_text_at(hSession,row,col,sz,lf ? '\n' : 0); | |
360 | 360 | |
361 | 361 | if(ptr) |
362 | 362 | { |
... | ... | @@ -372,9 +372,9 @@ |
372 | 372 | return _set_text_at(hSession,row,col,(const unsigned char *) str); |
373 | 373 | } |
374 | 374 | |
375 | - int cmp_text_at(int row, int col, const char *text) | |
375 | + int cmp_text_at(int row, int col, const char *text, bool lf) | |
376 | 376 | { |
377 | - return _cmp_text_at(hSession,row,col,text); | |
377 | + return _cmp_text_at(hSession,row,col,text,lf ? '\n' : 0); | |
378 | 378 | } |
379 | 379 | |
380 | 380 | string get_text(int offset, size_t len, bool lf) | ... | ... |
src/libpw3270cpp/remote.cc
... | ... | @@ -1031,11 +1031,11 @@ |
1031 | 1031 | #endif |
1032 | 1032 | } |
1033 | 1033 | |
1034 | - string get_text_at(int row, int col, size_t sz) | |
1034 | + string get_text_at(int row, int col, size_t sz, bool lf) | |
1035 | 1035 | { |
1036 | 1036 | #if defined(WIN32) |
1037 | 1037 | |
1038 | - struct hllapi_packet_query_at query = { HLLAPI_PACKET_GET_TEXT_AT, (unsigned short) row, (unsigned short) col, (unsigned short) sz }; | |
1038 | + struct hllapi_packet_query_at query = { HLLAPI_PACKET_GET_TEXT_AT, (unsigned short) row, (unsigned short) col, (unsigned short) sz, lf ? '\n' : 0 }; | |
1039 | 1039 | |
1040 | 1040 | return query_string(&query,sizeof(query),sz); |
1041 | 1041 | |
... | ... | @@ -1044,13 +1044,14 @@ |
1044 | 1044 | dbus_int32_t r = (dbus_int32_t) row; |
1045 | 1045 | dbus_int32_t c = (dbus_int32_t) col; |
1046 | 1046 | dbus_int32_t l = (dbus_int32_t) sz; |
1047 | + unsigned char d = lf ? '\n' : 0; | |
1047 | 1048 | |
1048 | 1049 | DBusMessage * msg = create_message("getTextAt"); |
1049 | 1050 | if(!msg) |
1050 | 1051 | return NULL; |
1051 | 1052 | |
1052 | 1053 | trace("%s(%d,%d,%d)",__FUNCTION__,r,c,l); |
1053 | - dbus_message_append_args(msg, DBUS_TYPE_INT32, &r, DBUS_TYPE_INT32, &c, DBUS_TYPE_INT32, &l, DBUS_TYPE_INVALID); | |
1054 | + dbus_message_append_args(msg, DBUS_TYPE_INT32, &r, DBUS_TYPE_INT32, &c, DBUS_TYPE_INT32, &l, DBUS_TYPE_BYTE, &d, DBUS_TYPE_INVALID); | |
1054 | 1055 | |
1055 | 1056 | return get_string(call(msg)); |
1056 | 1057 | |
... | ... | @@ -1097,7 +1098,7 @@ |
1097 | 1098 | |
1098 | 1099 | } |
1099 | 1100 | |
1100 | - int cmp_text_at(int row, int col, const char *text) | |
1101 | + int cmp_text_at(int row, int col, const char *text, bool lf) | |
1101 | 1102 | { |
1102 | 1103 | debug("%s(%d,%d,\"%s\")",__FUNCTION__,row,col,text); |
1103 | 1104 | |
... | ... | @@ -1110,6 +1111,7 @@ |
1110 | 1111 | query->packet_id = HLLAPI_PACKET_CMP_TEXT_AT; |
1111 | 1112 | query->row = row; |
1112 | 1113 | query->col = col; |
1114 | + query->lf = lf ? '\n' : 0 | |
1113 | 1115 | strcpy(query->text,text); |
1114 | 1116 | |
1115 | 1117 | return query_intval((void *) query, cbSize, true); |
... | ... | @@ -1118,8 +1120,9 @@ |
1118 | 1120 | |
1119 | 1121 | dbus_int32_t r = (dbus_int32_t) row; |
1120 | 1122 | dbus_int32_t c = (dbus_int32_t) col; |
1123 | + unsigned char d = lf ? '\n' : 0; | |
1121 | 1124 | |
1122 | - return query_intval("cmpTextAt", DBUS_TYPE_INT32, &r, DBUS_TYPE_INT32, &c, DBUS_TYPE_STRING, &text, DBUS_TYPE_INVALID); | |
1125 | + return query_intval("cmpTextAt", DBUS_TYPE_INT32, &r, DBUS_TYPE_INT32, &c, DBUS_TYPE_STRING, &text, DBUS_TYPE_BYTE, &d, DBUS_TYPE_INVALID); | |
1123 | 1126 | |
1124 | 1127 | #endif |
1125 | 1128 | |
... | ... | @@ -1135,7 +1138,7 @@ |
1135 | 1138 | if(!is_connected()) |
1136 | 1139 | return ENOTCONN; |
1137 | 1140 | |
1138 | - if(!cmp_text_at(row,col,key)) | |
1141 | + if(!cmp_text_at(row,col,key,false)) | |
1139 | 1142 | return 0; |
1140 | 1143 | |
1141 | 1144 | #ifdef WIN32 | ... | ... |
src/libpw3270cpp/service.cc
... | ... | @@ -213,17 +213,19 @@ |
213 | 213 | |
214 | 214 | } |
215 | 215 | |
216 | - virtual string get_text_at(int row, int col, size_t sz) | |
216 | + virtual string get_text_at(int row, int col, size_t sz, bool lf = true) | |
217 | 217 | { |
218 | 218 | dbus_int32_t r = (dbus_int32_t) row; |
219 | 219 | dbus_int32_t c = (dbus_int32_t) col; |
220 | 220 | dbus_int32_t s = (dbus_int32_t) sz; |
221 | + char l = lf ? '\n' : 0; | |
221 | 222 | |
222 | 223 | return getString( "getTextAt", |
223 | 224 | DBUS_TYPE_STRING, &this->id, |
224 | 225 | DBUS_TYPE_INT32, &r, |
225 | 226 | DBUS_TYPE_INT32, &c, |
226 | 227 | DBUS_TYPE_INT32, &s, |
228 | + DBUS_TYPE_BYTE, &l, | |
227 | 229 | DBUS_TYPE_INVALID); |
228 | 230 | |
229 | 231 | } |
... | ... | @@ -241,16 +243,18 @@ |
241 | 243 | DBUS_TYPE_INVALID); |
242 | 244 | } |
243 | 245 | |
244 | - virtual int cmp_text_at(int row, int col, const char *str) | |
246 | + virtual int cmp_text_at(int row, int col, const char *str, bool lf) | |
245 | 247 | { |
246 | 248 | dbus_int32_t r = (dbus_int32_t) row; |
247 | 249 | dbus_int32_t c = (dbus_int32_t) col; |
250 | + char l = lf ? '\n' : 0; | |
248 | 251 | |
249 | 252 | return getInteger( "cmpTextAt", |
250 | 253 | DBUS_TYPE_STRING, &this->id, |
251 | 254 | DBUS_TYPE_INT32, &r, |
252 | 255 | DBUS_TYPE_INT32, &c, |
253 | 256 | DBUS_TYPE_STRING, &str, |
257 | + DBUS_TYPE_BYTE, &l, | |
254 | 258 | DBUS_TYPE_INVALID); |
255 | 259 | } |
256 | 260 | ... | ... |
src/plugins/dbus3270/gobject.c
... | ... | @@ -286,7 +286,7 @@ void pw3270_dbus_input(PW3270Dbus *object, const gchar *utftext, DBusGMethodInvo |
286 | 286 | } |
287 | 287 | |
288 | 288 | |
289 | -void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, DBusGMethodInvocation *context) | |
289 | +void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, char lf, DBusGMethodInvocation *context) | |
290 | 290 | { |
291 | 291 | gchar * text; |
292 | 292 | H3270 * hSession = pw3270_dbus_get_session_handle(object); |
... | ... | @@ -295,7 +295,7 @@ void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, DBus |
295 | 295 | if(pw3270_dbus_check_valid_state(object,context)) |
296 | 296 | return; |
297 | 297 | |
298 | - text = lib3270_get_text_at(hSession, row, col, len); | |
298 | + text = lib3270_get_text_at(hSession, row, col, len, lf); | |
299 | 299 | if(!text) |
300 | 300 | { |
301 | 301 | GError *error = pw3270_dbus_get_error_from_errno(errno); |
... | ... | @@ -415,7 +415,7 @@ void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, DBus |
415 | 415 | dbus_g_method_return(context,lib3270_set_toggle(pw3270_dbus_get_session_handle(object),id,value)); |
416 | 416 | } |
417 | 417 | |
418 | -void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar *utftext, DBusGMethodInvocation *context) | |
418 | +void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar *utftext, char lf, DBusGMethodInvocation *context) | |
419 | 419 | { |
420 | 420 | gchar * text; |
421 | 421 | H3270 * hSession = pw3270_dbus_get_session_handle(object); |
... | ... | @@ -426,7 +426,7 @@ void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar * |
426 | 426 | |
427 | 427 | text = g_convert_with_fallback(utftext,-1,lib3270_get_display_charset(hSession),"UTF-8","?",NULL,NULL,NULL); |
428 | 428 | |
429 | - dbus_g_method_return(context,lib3270_cmp_text_at(hSession,row,col,text)); | |
429 | + dbus_g_method_return(context,lib3270_cmp_text_at(hSession,row,col,text,lf)); | |
430 | 430 | |
431 | 431 | g_free(text); |
432 | 432 | } | ... | ... |
src/plugins/dbus3270/pw3270dbus.xml
... | ... | @@ -73,6 +73,7 @@ |
73 | 73 | <arg type="i" name="row" direction="in" /> |
74 | 74 | <arg type="i" name="col" direction="in" /> |
75 | 75 | <arg type="i" name="len" direction="in" /> |
76 | + <arg type="y" name="lf" direction="in" /> | |
76 | 77 | <arg type="s" name="text" direction="out" /> |
77 | 78 | </method> |
78 | 79 | <method name="getText"> |
... | ... | @@ -162,6 +163,7 @@ |
162 | 163 | <arg type="i" name="row" direction="in" /> |
163 | 164 | <arg type="i" name="col" direction="in" /> |
164 | 165 | <arg type="s" name="text" direction="in" /> |
166 | + <arg type="y" name="lf" direction="in" /> | |
165 | 167 | <arg type="i" name="result" direction="out" /> |
166 | 168 | </method> |
167 | 169 | <method name="getFieldStart"> | ... | ... |
src/plugins/dbus3270/service.h
... | ... | @@ -112,9 +112,9 @@ |
112 | 112 | void pw3270_dbus_pf_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context); |
113 | 113 | void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context); |
114 | 114 | void pw3270_dbus_set_text_at(PW3270Dbus *object, int row, int col, const gchar *text, DBusGMethodInvocation *context); |
115 | - void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, DBusGMethodInvocation *context); | |
115 | + void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, char lf, DBusGMethodInvocation *context); | |
116 | 116 | void pw3270_dbus_get_text(PW3270Dbus *object, int offset, int len, char lf, DBusGMethodInvocation *context); |
117 | - void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar *text, DBusGMethodInvocation *context); | |
117 | + void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar *text, char lf, DBusGMethodInvocation *context); | |
118 | 118 | void pw3270_dbus_input(PW3270Dbus *object, const gchar *utftext, DBusGMethodInvocation *context); |
119 | 119 | |
120 | 120 | void pw3270_dbus_set_clipboard(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context); | ... | ... |