Commit 70c33ef26da1b7e99656777490ecdf4d5e2840f8
1 parent
261603b3
Exists in
master
and in
3 other branches
Adding method to erase selected inputs.
Showing
5 changed files
with
42 additions
and
4 deletions
Show diff stats
src/include/lib3270/selection.h
| ... | ... | @@ -183,4 +183,12 @@ |
| 183 | 183 | */ |
| 184 | 184 | LIB3270_EXPORT int lib3270_select_region(H3270 *h, int start, int end); |
| 185 | 185 | |
| 186 | + /** | |
| 187 | + * @brief Erase selected inputs. | |
| 188 | + * | |
| 189 | + * @param hSession Session handle. | |
| 190 | + * | |
| 191 | + */ | |
| 192 | + LIB3270_EXPORT int lib3270_erase_selected(H3270 *hSession); | |
| 193 | + | |
| 186 | 194 | #endif // LIB3270_SELECTION_H_INCLUDED | ... | ... |
src/lib3270/paste.c
| ... | ... | @@ -108,7 +108,7 @@ |
| 108 | 108 | if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_MARGINED_PASTE)) |
| 109 | 109 | { |
| 110 | 110 | baddr = hSession->cursor_addr; |
| 111 | - while(BA_TO_COL(baddr) < lmargin) | |
| 111 | + while(BA_TO_COL(baddr) < ((unsigned int) lmargin)) | |
| 112 | 112 | { |
| 113 | 113 | baddr = ROWCOL_TO_BA(BA_TO_ROW(baddr), lmargin); |
| 114 | 114 | if (!ever) |
| ... | ... | @@ -151,7 +151,7 @@ |
| 151 | 151 | |
| 152 | 152 | data->qtd++; |
| 153 | 153 | |
| 154 | - if(BA_TO_ROW(hSession->cursor_addr) != data->row) | |
| 154 | + if(BA_TO_ROW(hSession->cursor_addr) != ((unsigned int) data->row)) | |
| 155 | 155 | { |
| 156 | 156 | trace("Row changed from %d to %d",data->row,BA_TO_ROW(hSession->cursor_addr)); |
| 157 | 157 | if(!remargin(hSession,data->orig_col)) | ... | ... |
src/lib3270/private.h
| ... | ... | @@ -735,8 +735,10 @@ LIB3270_INTERNAL int non_blocking(H3270 *session, Boolean on); |
| 735 | 735 | #ifdef SSL_ENABLE_CRL_CHECK |
| 736 | 736 | LIB3270_INTERNAL int lib3270_get_X509_CRL(H3270 *hSession, SSL_ERROR_MESSAGE * message); |
| 737 | 737 | LIB3270_INTERNAL int lib3270_check_X509_crl(H3270 *hSession, SSL_ERROR_MESSAGE * message); |
| 738 | - | |
| 739 | 738 | #endif // SSL_ENABLE_CRL_CHECK |
| 740 | 739 | |
| 740 | + /// @brief Clear element at adress. | |
| 741 | + LIB3270_INTERNAL void clear_chr(H3270 *hSession, int baddr); | |
| 742 | + | |
| 741 | 743 | #endif |
| 742 | 744 | ... | ... |
src/lib3270/selection/get.c
| ... | ... | @@ -35,7 +35,7 @@ |
| 35 | 35 | |
| 36 | 36 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 37 | 37 | |
| 38 | -static void clear_chr(H3270 *hSession, int baddr) | |
| 38 | +void clear_chr(H3270 *hSession, int baddr) | |
| 39 | 39 | { |
| 40 | 40 | hSession->text[baddr].chr = ' '; |
| 41 | 41 | ... | ... |
src/lib3270/selection/selection.c
| ... | ... | @@ -33,6 +33,7 @@ |
| 33 | 33 | #include <lib3270/session.h> |
| 34 | 34 | #include <lib3270/selection.h> |
| 35 | 35 | #include "3270ds.h" |
| 36 | + #include "kybdc.h" | |
| 36 | 37 | |
| 37 | 38 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 38 | 39 | |
| ... | ... | @@ -431,3 +432,30 @@ LIB3270_EXPORT int lib3270_get_selection_rectangle(H3270 *hSession, unsigned int |
| 431 | 432 | return 0; |
| 432 | 433 | } |
| 433 | 434 | |
| 435 | +LIB3270_EXPORT int lib3270_erase_selected(H3270 *hSession) | |
| 436 | +{ | |
| 437 | + FAIL_IF_NOT_ONLINE(hSession); | |
| 438 | + | |
| 439 | + if (hSession->kybdlock) | |
| 440 | + { | |
| 441 | + enq_action(hSession, lib3270_erase_selected); | |
| 442 | + return 0; | |
| 443 | + } | |
| 444 | + | |
| 445 | + unsigned int baddr = 0; | |
| 446 | + unsigned char fa = 0; | |
| 447 | + | |
| 448 | + for(baddr = 0; baddr < lib3270_get_length(hSession); baddr++) | |
| 449 | + { | |
| 450 | + if(hSession->ea_buf[baddr].fa) { | |
| 451 | + fa = hSession->ea_buf[baddr].fa; | |
| 452 | + } | |
| 453 | + | |
| 454 | + if( (hSession->text[baddr].attr & LIB3270_ATTR_SELECTED) && !FA_IS_PROTECTED(fa)) | |
| 455 | + { | |
| 456 | + clear_chr(hSession,baddr); | |
| 457 | + } | |
| 458 | + } | |
| 459 | + | |
| 460 | + return -1; | |
| 461 | +} | ... | ... |