Commit 01edcda07888b72a5072e4c67b8109525c0bcb10
1 parent
7a18fcce
Exists in
master
and in
3 other branches
Removendo campos sem uso, incluindo suporte a auto-reconnect, iniciando reinclus…
…ao de movimentação da seleção por mouse
Showing
5 changed files
with
139 additions
and
42 deletions
Show diff stats
| ... | ... | @@ -379,7 +379,7 @@ |
| 379 | 379 | |
| 380 | 380 | /* Get connection info */ |
| 381 | 381 | #define get_connected_lu(h) lib3270_get_luname(h) |
| 382 | - #define get_current_host(h) lib3270_get_host(h) | |
| 382 | +// #define get_current_host(h) lib3270_get_host(h) | |
| 383 | 383 | |
| 384 | 384 | LOCAL_EXTERN SCRIPT_STATE status_script(SCRIPT_STATE state); |
| 385 | 385 | ... | ... |
globals.h
| ... | ... | @@ -212,9 +212,11 @@ LIB3270_INTERNAL char *hostname; |
| 212 | 212 | |
| 213 | 213 | #endif /*]*/ |
| 214 | 214 | |
| 215 | -#if defined(LOCAL_PROCESS) /*[*/ | |
| 215 | +/* | |
| 216 | +#if defined(LOCAL_PROCESS) | |
| 216 | 217 | LIB3270_INTERNAL Boolean local_process; |
| 217 | -#endif /*]*/ | |
| 218 | +#endif | |
| 219 | +*/ | |
| 218 | 220 | |
| 219 | 221 | // LIB3270_INTERNAL int maxCOLS; |
| 220 | 222 | // LIB3270_INTERNAL int maxROWS; | ... | ... |
host.c
| ... | ... | @@ -194,8 +194,9 @@ hostfile_lookup(const char *name, char **hostname, char **loginstring) |
| 194 | 194 | } |
| 195 | 195 | */ |
| 196 | 196 | |
| 197 | -#if defined(LOCAL_PROCESS) /*[*/ | |
| 198 | -/* Recognize and translate "-e" options. */ | |
| 197 | +/* | |
| 198 | +#if defined(LOCAL_PROCESS) | |
| 199 | +// Recognize and translate "-e" options. | |
| 199 | 200 | static const char * |
| 200 | 201 | parse_localprocess(const char *s) |
| 201 | 202 | { |
| ... | ... | @@ -216,7 +217,8 @@ parse_localprocess(const char *s) |
| 216 | 217 | } |
| 217 | 218 | return CN; |
| 218 | 219 | } |
| 219 | -#endif /*]*/ | |
| 220 | +#endif | |
| 221 | +*/ | |
| 220 | 222 | |
| 221 | 223 | /* |
| 222 | 224 | * Strip qualifiers from a hostname. |
| ... | ... | @@ -480,16 +482,18 @@ static int do_connect(H3270 *hSession, const char *n) |
| 480 | 482 | Boolean resolving; |
| 481 | 483 | Boolean pending; |
| 482 | 484 | static Boolean ansi_host; |
| 483 | - const char *localprocess_cmd = NULL; | |
| 485 | +// const char *localprocess_cmd = NULL; | |
| 484 | 486 | Boolean has_colons = False; |
| 485 | 487 | |
| 486 | - if (CONNECTED || hSession->auto_reconnect_inprogress) | |
| 487 | - return 0; | |
| 488 | + if (lib3270_connected(hSession) || hSession->auto_reconnect_inprogress) | |
| 489 | + return EBUSY; | |
| 488 | 490 | |
| 489 | 491 | /* Skip leading blanks. */ |
| 490 | 492 | while (*n == ' ') |
| 491 | 493 | n++; |
| 492 | - if (!*n) { | |
| 494 | + | |
| 495 | + if (!*n) | |
| 496 | + { | |
| 493 | 497 | popup_an_error(hSession,_( "Invalid (empty) hostname" )); |
| 494 | 498 | return -1; |
| 495 | 499 | } |
| ... | ... | @@ -503,19 +507,16 @@ static int do_connect(H3270 *hSession, const char *n) |
| 503 | 507 | *s-- = '\0'; |
| 504 | 508 | |
| 505 | 509 | /* Remember this hostname, as the last hostname we connected to. */ |
| 506 | - Replace(hSession->reconnect_host, NewString(nb)); | |
| 510 | + lib3270_set_host(hSession,nb); | |
| 507 | 511 | |
| 508 | -// #if defined(X3270_DISPLAY) | |
| 509 | -// /* Remember this hostname in the recent connection list and file. */ | |
| 510 | -// save_recent(nb); | |
| 511 | -// #endif | |
| 512 | - | |
| 513 | -#if defined(LOCAL_PROCESS) /*[*/ | |
| 512 | +/* | |
| 513 | +#if defined(LOCAL_PROCESS) | |
| 514 | 514 | if ((localprocess_cmd = parse_localprocess(nb)) != CN) { |
| 515 | 515 | chost = localprocess_cmd; |
| 516 | 516 | port = appres.port; |
| 517 | 517 | } else |
| 518 | -#endif /*]*/ | |
| 518 | +#endif | |
| 519 | +*/ | |
| 519 | 520 | { |
| 520 | 521 | Boolean needed; |
| 521 | 522 | |
| ... | ... | @@ -541,12 +542,12 @@ static int do_connect(H3270 *hSession, const char *n) |
| 541 | 542 | * full_current_host is the entire string, for use in reconnecting |
| 542 | 543 | */ |
| 543 | 544 | if (n != hSession->full_current_host) |
| 544 | - { | |
| 545 | - Replace(hSession->full_current_host, NewString(n)); | |
| 546 | - } | |
| 545 | + lib3270_set_host(hSession,n); | |
| 547 | 546 | |
| 548 | 547 | Replace(hSession->current_host, CN); |
| 549 | 548 | |
| 549 | +/* | |
| 550 | + | |
| 550 | 551 | if (localprocess_cmd != CN) { |
| 551 | 552 | if (hSession->full_current_host[strlen(OptLocalProcess)] != '\0') |
| 552 | 553 | hSession->current_host = NewString(hSession->full_current_host + strlen(OptLocalProcess) + 1); |
| ... | ... | @@ -555,6 +556,7 @@ static int do_connect(H3270 *hSession, const char *n) |
| 555 | 556 | } else { |
| 556 | 557 | hSession->current_host = s; |
| 557 | 558 | } |
| 559 | +*/ | |
| 558 | 560 | |
| 559 | 561 | has_colons = (strchr(chost, ':') != NULL); |
| 560 | 562 | |
| ... | ... | @@ -569,7 +571,7 @@ static int do_connect(H3270 *hSession, const char *n) |
| 569 | 571 | |
| 570 | 572 | /* Attempt contact. */ |
| 571 | 573 | hSession->ever_3270 = False; |
| 572 | - hSession->net_sock = net_connect(hSession, chost, port, localprocess_cmd != CN, &resolving,&pending); | |
| 574 | + hSession->net_sock = net_connect(hSession, chost, port, 0, &resolving,&pending); | |
| 573 | 575 | |
| 574 | 576 | if (hSession->net_sock < 0 && !resolving) |
| 575 | 577 | { |
| ... | ... | @@ -612,6 +614,16 @@ static int do_connect(H3270 *hSession, const char *n) |
| 612 | 614 | return 0; |
| 613 | 615 | } |
| 614 | 616 | |
| 617 | +/** | |
| 618 | + * Connect to selected host. | |
| 619 | + * | |
| 620 | + * @param h Session handle. | |
| 621 | + * @param n Hostname (null to reconnect to the last one; | |
| 622 | + * @param wait Wait for connection ok before return. | |
| 623 | + * | |
| 624 | + * @return 0 if the connection was ok, non zero on error. | |
| 625 | + * | |
| 626 | + */ | |
| 615 | 627 | int lib3270_connect(H3270 *h, const char *n, int wait) |
| 616 | 628 | { |
| 617 | 629 | int rc; |
| ... | ... | @@ -627,7 +639,11 @@ int lib3270_connect(H3270 *h, const char *n, int wait) |
| 627 | 639 | return EBUSY; |
| 628 | 640 | |
| 629 | 641 | if(!n) |
| 630 | - return ENOENT; | |
| 642 | + { | |
| 643 | + n = h->full_current_host; | |
| 644 | + if(!n) | |
| 645 | + return EINVAL; | |
| 646 | + } | |
| 631 | 647 | |
| 632 | 648 | rc = do_connect(h,n); |
| 633 | 649 | if(rc) |
| ... | ... | @@ -654,7 +670,7 @@ int lib3270_connect(H3270 *h, const char *n, int wait) |
| 654 | 670 | */ |
| 655 | 671 | static void try_reconnect(H3270 *session) |
| 656 | 672 | { |
| 657 | - WriteLog("3270","Starting auto-reconnect (Host: %s)",session->reconnect_host ? session->reconnect_host : "-"); | |
| 673 | + WriteLog("3270","Starting auto-reconnect (Host: %s)",session->full_current_host ? session->full_current_host : "-"); | |
| 658 | 674 | session->auto_reconnect_inprogress = False; |
| 659 | 675 | lib3270_reconnect(session,0); |
| 660 | 676 | } |
| ... | ... | @@ -758,6 +774,29 @@ void lib3270_st_changed(H3270 *h, int tx, int mode) |
| 758 | 774 | } |
| 759 | 775 | } |
| 760 | 776 | |
| 777 | +LIB3270_EXPORT const char * lib3270_set_host(H3270 *h, const char *n) | |
| 778 | +{ | |
| 779 | + CHECK_SESSION_HANDLE(h); | |
| 780 | + | |
| 781 | + Trace("%s: %p",__FUNCTION__,n); | |
| 782 | + | |
| 783 | + if(!n) | |
| 784 | + return NULL; | |
| 785 | + | |
| 786 | + if(h->full_current_host) | |
| 787 | + free(h->full_current_host); | |
| 788 | + | |
| 789 | + h->full_current_host = strdup(n); | |
| 790 | + | |
| 791 | + return h->full_current_host; | |
| 792 | +} | |
| 793 | + | |
| 794 | +LIB3270_EXPORT const char * lib3270_get_host(H3270 *h) | |
| 795 | +{ | |
| 796 | + CHECK_SESSION_HANDLE(h); | |
| 797 | + return h->full_current_host; | |
| 798 | +} | |
| 799 | + | |
| 761 | 800 | LIB3270_EXPORT int lib3270_reconnect(H3270 *h,int wait) |
| 762 | 801 | { |
| 763 | 802 | int rc; |
| ... | ... | @@ -767,13 +806,13 @@ LIB3270_EXPORT int lib3270_reconnect(H3270 *h,int wait) |
| 767 | 806 | if (CONNECTED || HALF_CONNECTED) |
| 768 | 807 | return EBUSY; |
| 769 | 808 | |
| 770 | - if (h->current_host == CN) | |
| 771 | - return ENOENT; | |
| 809 | + if (h->full_current_host == CN) | |
| 810 | + return EINVAL; | |
| 772 | 811 | |
| 773 | 812 | if (h->auto_reconnect_inprogress) |
| 774 | 813 | return EBUSY; |
| 775 | 814 | |
| 776 | - rc = lib3270_connect(h,h->reconnect_host,wait); | |
| 815 | + rc = lib3270_connect(h,h->full_current_host,wait); | |
| 777 | 816 | |
| 778 | 817 | if(rc) |
| 779 | 818 | { |
| ... | ... | @@ -790,8 +829,3 @@ LIB3270_EXPORT const char * lib3270_get_luname(H3270 *h) |
| 790 | 829 | return h->connected_lu; |
| 791 | 830 | } |
| 792 | 831 | |
| 793 | -LIB3270_EXPORT const char * lib3270_get_host(H3270 *h) | |
| 794 | -{ | |
| 795 | - CHECK_SESSION_HANDLE(h); | |
| 796 | - return h->current_host; | |
| 797 | -} | ... | ... |
selection.c
| ... | ... | @@ -71,6 +71,20 @@ static void update_selected_rectangle(H3270 *session) |
| 71 | 71 | p[1].row = (end/session->cols); |
| 72 | 72 | p[1].col = (end%session->cols); |
| 73 | 73 | |
| 74 | + if(p[0].row > p[1].row) | |
| 75 | + { | |
| 76 | + int swp = p[0].row; | |
| 77 | + p[0].row = p[1].row; | |
| 78 | + p[1].row = swp; | |
| 79 | + } | |
| 80 | + | |
| 81 | + if(p[0].col > p[1].col) | |
| 82 | + { | |
| 83 | + int swp = p[0].col; | |
| 84 | + p[0].col = p[1].col; | |
| 85 | + p[1].col = swp; | |
| 86 | + } | |
| 87 | + | |
| 74 | 88 | // First remove unselected areas |
| 75 | 89 | baddr = 0; |
| 76 | 90 | for(row=0;row < session->rows;row++) |
| ... | ... | @@ -214,6 +228,35 @@ LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr) |
| 214 | 228 | |
| 215 | 229 | } |
| 216 | 230 | |
| 231 | +LIB3270_EXPORT unsigned char lib3270_get_selection_flags(H3270 *hSession, int baddr) | |
| 232 | +{ | |
| 233 | + int row,col; | |
| 234 | + unsigned char rc = 0; | |
| 235 | + | |
| 236 | + CHECK_SESSION_HANDLE(hSession); | |
| 237 | + | |
| 238 | + if(!(lib3270_connected(hSession) && (hSession->text[baddr].attr & LIB3270_ATTR_SELECTED))) | |
| 239 | + return rc; | |
| 240 | + | |
| 241 | + row = baddr / hSession->cols; | |
| 242 | + col = baddr % hSession->cols; | |
| 243 | + rc |= 0x01; | |
| 244 | + | |
| 245 | + if( (col == 0) || !(hSession->text[baddr-1].attr & LIB3270_ATTR_SELECTED) ) | |
| 246 | + rc |= 0x02; | |
| 247 | + | |
| 248 | + if( (row == 0) || !(hSession->text[baddr-hSession->cols].attr & LIB3270_ATTR_SELECTED) ) | |
| 249 | + rc |= 0x04; | |
| 250 | + | |
| 251 | + if( (col == hSession->cols) || !(hSession->text[baddr+1].attr & LIB3270_ATTR_SELECTED) ) | |
| 252 | + rc |= 0x08; | |
| 253 | + | |
| 254 | + if( (row == hSession->rows) || !(hSession->text[baddr+hSession->cols].attr & LIB3270_ATTR_SELECTED) ) | |
| 255 | + rc |= 0x10; | |
| 256 | + | |
| 257 | + return rc; | |
| 258 | +} | |
| 259 | + | |
| 217 | 260 | LIB3270_EXPORT void lib3270_select_word(H3270 *session, int baddr) |
| 218 | 261 | { |
| 219 | 262 | int pos, len; |
| ... | ... | @@ -373,6 +416,8 @@ LIB3270_EXPORT char * lib3270_get_selected(H3270 *hSession) |
| 373 | 416 | |
| 374 | 417 | LIB3270_EXPORT int lib3270_get_selected_addr(H3270 *hSession, int *begin, int *end) |
| 375 | 418 | { |
| 419 | + CHECK_SESSION_HANDLE(hSession); | |
| 420 | + | |
| 376 | 421 | if(!hSession->selected || hSession->select.begin == hSession->select.end) |
| 377 | 422 | return -1; |
| 378 | 423 | |
| ... | ... | @@ -390,6 +435,12 @@ LIB3270_EXPORT int lib3270_get_selected_addr(H3270 *hSession, int *begin, int *e |
| 390 | 435 | return 0; |
| 391 | 436 | } |
| 392 | 437 | |
| 438 | +LIB3270_EXPORT int lib3270_move_selected_area(H3270 *hSession, int from, int to) | |
| 439 | +{ | |
| 440 | + | |
| 441 | + | |
| 442 | + return from; | |
| 443 | +} | |
| 393 | 444 | |
| 394 | 445 | LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir) |
| 395 | 446 | { | ... | ... |
telnet.c
| ... | ... | @@ -111,6 +111,7 @@ int ns_rsent; |
| 111 | 111 | unsigned char *obuf; /* 3270 output buffer */ |
| 112 | 112 | unsigned char *obptr = (unsigned char *) NULL; |
| 113 | 113 | int linemode = 1; |
| 114 | + | |
| 114 | 115 | /* |
| 115 | 116 | #if defined(LOCAL_PROCESS) |
| 116 | 117 | Boolean local_process = False; |
| ... | ... | @@ -1010,10 +1011,11 @@ void net_input(H3270 *session) |
| 1010 | 1011 | |
| 1011 | 1012 | ns_brcvd += nr; |
| 1012 | 1013 | for (cp = netrbuf; cp < (netrbuf + nr); cp++) { |
| 1013 | -#if defined(LOCAL_PROCESS) /*[*/ | |
| 1014 | +/* | |
| 1015 | +#if defined(LOCAL_PROCESS) | |
| 1014 | 1016 | if (local_process) { |
| 1015 | - /* More to do here, probably. */ | |
| 1016 | - if (IN_NEITHER) { /* now can assume ANSI mode */ | |
| 1017 | + // More to do here, probably. | |
| 1018 | + if (IN_NEITHER) { // now can assume ANSI mode | |
| 1017 | 1019 | host_in3270(CONNECTED_ANSI); |
| 1018 | 1020 | hisopts[TELOPT_ECHO] = 1; |
| 1019 | 1021 | check_linemode(False); |
| ... | ... | @@ -1023,7 +1025,8 @@ void net_input(H3270 *session) |
| 1023 | 1025 | } |
| 1024 | 1026 | ansi_process((unsigned int) *cp); |
| 1025 | 1027 | } else { |
| 1026 | -#endif /*]*/ | |
| 1028 | +#endif | |
| 1029 | +*/ | |
| 1027 | 1030 | if (telnet_fsm(*cp)) { |
| 1028 | 1031 | (void) ctlr_dbcs_postprocess(); |
| 1029 | 1032 | host_disconnect(&h3270,True); |
| ... | ... | @@ -1891,11 +1894,13 @@ process_eor(void) |
| 1891 | 1894 | */ |
| 1892 | 1895 | void net_exception(H3270 *session) |
| 1893 | 1896 | { |
| 1894 | -#if defined(LOCAL_PROCESS) /*[*/ | |
| 1897 | +/* | |
| 1898 | +#if defined(LOCAL_PROCESS) | |
| 1895 | 1899 | if (local_process) { |
| 1896 | 1900 | trace_dsn("RCVD exception\n"); |
| 1897 | 1901 | } else |
| 1898 | -#endif /*[*/ | |
| 1902 | +#endif | |
| 1903 | +*/ | |
| 1899 | 1904 | { |
| 1900 | 1905 | trace_dsn("RCVD urgent data indication\n"); |
| 1901 | 1906 | if (!syncing) { |
| ... | ... | @@ -1953,11 +1958,14 @@ net_rawout(unsigned const char *buf, int len) |
| 1953 | 1958 | nw = SSL_write(ssl_con, (const char *) buf, n2w); |
| 1954 | 1959 | else |
| 1955 | 1960 | #endif /*]*/ |
| 1956 | -#if defined(LOCAL_PROCESS) /*[*/ | |
| 1961 | + | |
| 1962 | +/* | |
| 1963 | +#if defined(LOCAL_PROCESS) | |
| 1957 | 1964 | if (local_process) |
| 1958 | 1965 | nw = write(sock, (const char *) buf, n2w); |
| 1959 | 1966 | else |
| 1960 | -#endif /*]*/ | |
| 1967 | +#endif | |
| 1968 | +*/ | |
| 1961 | 1969 | nw = send(h3270.sock, (const char *) buf, n2w, 0); |
| 1962 | 1970 | if (nw < 0) { |
| 1963 | 1971 | #if defined(HAVE_LIBSSL) /*[*/ |
| ... | ... | @@ -2791,9 +2799,11 @@ void |
| 2791 | 2799 | net_sendc(char c) |
| 2792 | 2800 | { |
| 2793 | 2801 | if (c == '\r' && !linemode |
| 2794 | -#if defined(LOCAL_PROCESS) /*[*/ | |
| 2802 | +/* | |
| 2803 | +#if defined(LOCAL_PROCESS) | |
| 2795 | 2804 | && !local_process |
| 2796 | -#endif /*]*/ | |
| 2805 | +#endif | |
| 2806 | +*/ | |
| 2797 | 2807 | ) { |
| 2798 | 2808 | /* CR must be quoted */ |
| 2799 | 2809 | net_cookout("\r\0", 2); | ... | ... |