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); | ... | ... |