Commit 803eba3bce9ddcadce8c854ade0d87921b471aa9
1 parent
48355f11
Exists in
master
and in
3 other branches
Adjusments on preparation for oversize support.
Showing
24 changed files
with
582 additions
and
422 deletions
Show diff stats
lib3270.cbp
@@ -110,6 +110,9 @@ | @@ -110,6 +110,9 @@ | ||
110 | <Unit filename="src/core/log.c"> | 110 | <Unit filename="src/core/log.c"> |
111 | <Option compilerVar="CC" /> | 111 | <Option compilerVar="CC" /> |
112 | </Unit> | 112 | </Unit> |
113 | + <Unit filename="src/core/model.c"> | ||
114 | + <Option compilerVar="CC" /> | ||
115 | + </Unit> | ||
113 | <Unit filename="src/core/options.c"> | 116 | <Unit filename="src/core/options.c"> |
114 | <Option compilerVar="CC" /> | 117 | <Option compilerVar="CC" /> |
115 | </Unit> | 118 | </Unit> |
src/core/ansi.c
@@ -533,10 +533,10 @@ static enum lib3270_ansi_state ansi_newline(H3270 *hSession, int GNUC_UNUSED(ig1 | @@ -533,10 +533,10 @@ static enum lib3270_ansi_state ansi_newline(H3270 *hSession, int GNUC_UNUSED(ig1 | ||
533 | { | 533 | { |
534 | int nc; | 534 | int nc; |
535 | 535 | ||
536 | - cursor_move(hSession,hSession->cursor_addr - (hSession->cursor_addr % hSession->cols)); | ||
537 | - nc = hSession->cursor_addr + hSession->cols; | 536 | + cursor_move(hSession,hSession->cursor_addr - (hSession->cursor_addr % hSession->view.cols)); |
537 | + nc = hSession->cursor_addr + hSession->view.cols; | ||
538 | 538 | ||
539 | - if (nc < hSession->scroll_bottom * hSession->cols) | 539 | + if (nc < hSession->scroll_bottom * hSession->view.cols) |
540 | cursor_move(hSession,nc); | 540 | cursor_move(hSession,nc); |
541 | else | 541 | else |
542 | ansi_scroll(hSession); | 542 | ansi_scroll(hSession); |
@@ -552,11 +552,11 @@ ansi_cursor_up(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | @@ -552,11 +552,11 @@ ansi_cursor_up(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | ||
552 | 552 | ||
553 | if (nn < 1) | 553 | if (nn < 1) |
554 | nn = 1; | 554 | nn = 1; |
555 | - rr = hSession->cursor_addr / hSession->cols; | 555 | + rr = hSession->cursor_addr / hSession->view.cols; |
556 | if (rr - nn < 0) | 556 | if (rr - nn < 0) |
557 | - cursor_move(hSession, hSession->cursor_addr % hSession->cols); | 557 | + cursor_move(hSession, hSession->cursor_addr % hSession->view.cols); |
558 | else | 558 | else |
559 | - cursor_move(hSession, hSession->cursor_addr - (nn * hSession->cols)); | 559 | + cursor_move(hSession, hSession->cursor_addr - (nn * hSession->view.cols)); |
560 | hSession->held_wrap = 0; | 560 | hSession->held_wrap = 0; |
561 | return DATA; | 561 | return DATA; |
562 | } | 562 | } |
@@ -607,17 +607,17 @@ static enum lib3270_ansi_state ansi_reset(H3270 *hSession, int GNUC_UNUSED(ig1), | @@ -607,17 +607,17 @@ static enum lib3270_ansi_state ansi_reset(H3270 *hSession, int GNUC_UNUSED(ig1), | ||
607 | hSession->saved_altbuffer = 0; | 607 | hSession->saved_altbuffer = 0; |
608 | 608 | ||
609 | hSession->scroll_top = 1; | 609 | hSession->scroll_top = 1; |
610 | - hSession->scroll_bottom = hSession->rows; | 610 | + hSession->scroll_bottom = hSession->view.rows; |
611 | 611 | ||
612 | - Replace(hSession->tabs, (unsigned char *)lib3270_malloc((hSession->cols+7)/8)); | ||
613 | - for (i = 0; i < (hSession->cols+7)/8; i++) | 612 | + Replace(hSession->tabs, (unsigned char *)lib3270_malloc((hSession->view.cols+7)/8)); |
613 | + for (i = 0; i < (hSession->view.cols+7)/8; i++) | ||
614 | hSession->tabs[i] = 0x01; | 614 | hSession->tabs[i] = 0x01; |
615 | 615 | ||
616 | hSession->held_wrap = 0; | 616 | hSession->held_wrap = 0; |
617 | if (!hSession->ansi_reset) | 617 | if (!hSession->ansi_reset) |
618 | { | 618 | { |
619 | ctlr_altbuffer(hSession,True); | 619 | ctlr_altbuffer(hSession,True); |
620 | - ctlr_aclear(hSession, 0, hSession->rows * hSession->cols, 1); | 620 | + ctlr_aclear(hSession, 0, hSession->view.rows * hSession->view.cols, 1); |
621 | ctlr_altbuffer(hSession,False); | 621 | ctlr_altbuffer(hSession,False); |
622 | ctlr_clear(hSession,False); | 622 | ctlr_clear(hSession,False); |
623 | hSession->cbk.set_width(hSession,80); | 623 | hSession->cbk.set_width(hSession,80); |
@@ -630,8 +630,8 @@ static enum lib3270_ansi_state ansi_reset(H3270 *hSession, int GNUC_UNUSED(ig1), | @@ -630,8 +630,8 @@ static enum lib3270_ansi_state ansi_reset(H3270 *hSession, int GNUC_UNUSED(ig1), | ||
630 | static enum lib3270_ansi_state | 630 | static enum lib3270_ansi_state |
631 | ansi_insert_chars(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | 631 | ansi_insert_chars(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) |
632 | { | 632 | { |
633 | - int cc = hSession->cursor_addr % hSession->cols; /* current col */ | ||
634 | - int mc = hSession->cols - cc; /* max chars that can be inserted */ | 633 | + int cc = hSession->cursor_addr % hSession->view.cols; /* current col */ |
634 | + int mc = hSession->view.cols - cc; /* max chars that can be inserted */ | ||
635 | int ns; /* chars that are shifting */ | 635 | int ns; /* chars that are shifting */ |
636 | 636 | ||
637 | if (nn < 1) | 637 | if (nn < 1) |
@@ -656,11 +656,11 @@ ansi_cursor_down(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | @@ -656,11 +656,11 @@ ansi_cursor_down(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | ||
656 | 656 | ||
657 | if (nn < 1) | 657 | if (nn < 1) |
658 | nn = 1; | 658 | nn = 1; |
659 | - rr = hSession->cursor_addr / hSession->cols; | ||
660 | - if (rr + nn >= hSession->cols) | ||
661 | - cursor_move(hSession,(hSession->cols-1)*hSession->cols + (hSession->cursor_addr%hSession->cols)); | 659 | + rr = hSession->cursor_addr / hSession->view.cols; |
660 | + if (rr + nn >= hSession->view.cols) | ||
661 | + cursor_move(hSession,(hSession->view.cols-1)*hSession->view.cols + (hSession->cursor_addr % hSession->view.cols)); | ||
662 | else | 662 | else |
663 | - cursor_move(hSession,hSession->cursor_addr + (nn * hSession->cols)); | 663 | + cursor_move(hSession,hSession->cursor_addr + (nn * hSession->view.cols)); |
664 | hSession->held_wrap = 0; | 664 | hSession->held_wrap = 0; |
665 | return DATA; | 665 | return DATA; |
666 | } | 666 | } |
@@ -671,11 +671,11 @@ static enum lib3270_ansi_state ansi_cursor_right(H3270 *hSession, int nn, int GN | @@ -671,11 +671,11 @@ static enum lib3270_ansi_state ansi_cursor_right(H3270 *hSession, int nn, int GN | ||
671 | 671 | ||
672 | if (nn < 1) | 672 | if (nn < 1) |
673 | nn = 1; | 673 | nn = 1; |
674 | - cc = hSession->cursor_addr % hSession->cols; | ||
675 | - if (cc == hSession->cols-1) | 674 | + cc = hSession->cursor_addr % hSession->view.cols; |
675 | + if (cc == hSession->view.cols-1) | ||
676 | return DATA; | 676 | return DATA; |
677 | - if (cc + nn >= hSession->cols) | ||
678 | - nn = hSession->cols - 1 - cc; | 677 | + if (cc + nn >= hSession->view.cols) |
678 | + nn = hSession->view.cols - 1 - cc; | ||
679 | cursor_move(hSession,hSession->cursor_addr + nn); | 679 | cursor_move(hSession,hSession->cursor_addr + nn); |
680 | hSession->held_wrap = 0; | 680 | hSession->held_wrap = 0; |
681 | return DATA; | 681 | return DATA; |
@@ -693,7 +693,7 @@ ansi_cursor_left(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | @@ -693,7 +693,7 @@ ansi_cursor_left(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | ||
693 | } | 693 | } |
694 | if (nn < 1) | 694 | if (nn < 1) |
695 | nn = 1; | 695 | nn = 1; |
696 | - cc = hSession->cursor_addr % hSession->cols; | 696 | + cc = hSession->cursor_addr % hSession->view.cols; |
697 | if (!cc) | 697 | if (!cc) |
698 | return DATA; | 698 | return DATA; |
699 | if (nn > cc) | 699 | if (nn > cc) |
@@ -706,10 +706,10 @@ static enum lib3270_ansi_state | @@ -706,10 +706,10 @@ static enum lib3270_ansi_state | ||
706 | ansi_cursor_motion(H3270 *hSession, int n1, int n2) | 706 | ansi_cursor_motion(H3270 *hSession, int n1, int n2) |
707 | { | 707 | { |
708 | if (n1 < 1) n1 = 1; | 708 | if (n1 < 1) n1 = 1; |
709 | - if (n1 > hSession->rows) n1 = hSession->rows; | 709 | + if (n1 > hSession->view.rows) n1 = hSession->view.rows; |
710 | if (n2 < 1) n2 = 1; | 710 | if (n2 < 1) n2 = 1; |
711 | - if (n2 > hSession->cols) n2 = hSession->cols; | ||
712 | - cursor_move(hSession,(n1 - 1) * hSession->cols + (n2 - 1)); | 711 | + if (n2 > hSession->view.cols) n2 = hSession->view.cols; |
712 | + cursor_move(hSession,(n1 - 1) * hSession->view.cols + (n2 - 1)); | ||
713 | hSession->held_wrap = 0; | 713 | hSession->held_wrap = 0; |
714 | return DATA; | 714 | return DATA; |
715 | } | 715 | } |
@@ -719,14 +719,14 @@ ansi_erase_in_display(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | @@ -719,14 +719,14 @@ ansi_erase_in_display(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | ||
719 | { | 719 | { |
720 | switch (nn) { | 720 | switch (nn) { |
721 | case 0: /* below */ | 721 | case 0: /* below */ |
722 | - ctlr_aclear(hSession, hSession->cursor_addr, (hSession->rows * hSession->cols) - hSession->cursor_addr, 1); | 722 | + ctlr_aclear(hSession, hSession->cursor_addr, (hSession->view.rows * hSession->view.cols) - hSession->cursor_addr, 1); |
723 | break; | 723 | break; |
724 | case 1: /* above */ | 724 | case 1: /* above */ |
725 | ctlr_aclear(hSession, 0, hSession->cursor_addr + 1, 1); | 725 | ctlr_aclear(hSession, 0, hSession->cursor_addr + 1, 1); |
726 | break; | 726 | break; |
727 | case 2: /* all (without moving cursor) */ | 727 | case 2: /* all (without moving cursor) */ |
728 | // if (hSession->cursor_addr == 0 && !hSession->is_altbuffer) scroll_save(hSession->rows, True); | 728 | // if (hSession->cursor_addr == 0 && !hSession->is_altbuffer) scroll_save(hSession->rows, True); |
729 | - ctlr_aclear(hSession, 0, hSession->rows * hSession->cols, 1); | 729 | + ctlr_aclear(hSession, 0, hSession->view.rows * hSession->view.cols, 1); |
730 | break; | 730 | break; |
731 | } | 731 | } |
732 | return DATA; | 732 | return DATA; |
@@ -735,17 +735,17 @@ ansi_erase_in_display(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | @@ -735,17 +735,17 @@ ansi_erase_in_display(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | ||
735 | static enum lib3270_ansi_state | 735 | static enum lib3270_ansi_state |
736 | ansi_erase_in_line(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | 736 | ansi_erase_in_line(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) |
737 | { | 737 | { |
738 | - int nc = hSession->cursor_addr % hSession->cols; | 738 | + int nc = hSession->cursor_addr % hSession->view.cols; |
739 | 739 | ||
740 | switch (nn) { | 740 | switch (nn) { |
741 | case 0: /* to right */ | 741 | case 0: /* to right */ |
742 | - ctlr_aclear(hSession, hSession->cursor_addr, hSession->cols - nc, 1); | 742 | + ctlr_aclear(hSession, hSession->cursor_addr, hSession->view.cols - nc, 1); |
743 | break; | 743 | break; |
744 | case 1: /* to left */ | 744 | case 1: /* to left */ |
745 | ctlr_aclear(hSession, hSession->cursor_addr - nc, nc+1, 1); | 745 | ctlr_aclear(hSession, hSession->cursor_addr - nc, nc+1, 1); |
746 | break; | 746 | break; |
747 | case 2: /* all */ | 747 | case 2: /* all */ |
748 | - ctlr_aclear(hSession, hSession->cursor_addr - nc, hSession->cols, 1); | 748 | + ctlr_aclear(hSession, hSession->cursor_addr - nc, hSession->view.cols, 1); |
749 | break; | 749 | break; |
750 | } | 750 | } |
751 | return DATA; | 751 | return DATA; |
@@ -754,7 +754,7 @@ ansi_erase_in_line(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | @@ -754,7 +754,7 @@ ansi_erase_in_line(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | ||
754 | static enum lib3270_ansi_state | 754 | static enum lib3270_ansi_state |
755 | ansi_insert_lines(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | 755 | ansi_insert_lines(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) |
756 | { | 756 | { |
757 | - int rr = hSession->cursor_addr / hSession->cols; /* current row */ | 757 | + int rr = hSession->cursor_addr / hSession->view.cols; /* current row */ |
758 | int mr = hSession->scroll_bottom - rr; /* rows left at and below this one */ | 758 | int mr = hSession->scroll_bottom - rr; /* rows left at and below this one */ |
759 | int ns; /* rows that are shifting */ | 759 | int ns; /* rows that are shifting */ |
760 | 760 | ||
@@ -770,17 +770,17 @@ ansi_insert_lines(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | @@ -770,17 +770,17 @@ ansi_insert_lines(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | ||
770 | /* Move the victims down */ | 770 | /* Move the victims down */ |
771 | ns = mr - nn; | 771 | ns = mr - nn; |
772 | if (ns) | 772 | if (ns) |
773 | - ctlr_bcopy(hSession,rr * hSession->cols, (rr + nn) * hSession->cols, ns * hSession->cols, 1); | 773 | + ctlr_bcopy(hSession,rr * hSession->view.cols, (rr + nn) * hSession->view.cols, ns * hSession->view.cols, 1); |
774 | 774 | ||
775 | /* Clear the middle of the screen */ | 775 | /* Clear the middle of the screen */ |
776 | - ctlr_aclear(hSession, rr * hSession->cols, nn * hSession->cols, 1); | 776 | + ctlr_aclear(hSession, rr * hSession->view.cols, nn * hSession->view.cols, 1); |
777 | return DATA; | 777 | return DATA; |
778 | } | 778 | } |
779 | 779 | ||
780 | static enum lib3270_ansi_state | 780 | static enum lib3270_ansi_state |
781 | ansi_delete_lines(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | 781 | ansi_delete_lines(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) |
782 | { | 782 | { |
783 | - int rr = hSession->cursor_addr / hSession->cols; /* current row */ | 783 | + int rr = hSession->cursor_addr / hSession->view.cols; /* current row */ |
784 | int mr = hSession->scroll_bottom - rr; /* max rows that can be deleted */ | 784 | int mr = hSession->scroll_bottom - rr; /* max rows that can be deleted */ |
785 | int ns; /* rows that are shifting */ | 785 | int ns; /* rows that are shifting */ |
786 | 786 | ||
@@ -796,19 +796,19 @@ ansi_delete_lines(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | @@ -796,19 +796,19 @@ ansi_delete_lines(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | ||
796 | /* Move the surviving rows up */ | 796 | /* Move the surviving rows up */ |
797 | ns = mr - nn; | 797 | ns = mr - nn; |
798 | if (ns) | 798 | if (ns) |
799 | - ctlr_bcopy(hSession,(rr + nn) * hSession->cols, rr * hSession->cols, ns * hSession->cols, 1); | 799 | + ctlr_bcopy(hSession,(rr + nn) * hSession->view.cols, rr * hSession->view.cols, ns * hSession->view.cols, 1); |
800 | 800 | ||
801 | /* Clear the rest of the screen */ | 801 | /* Clear the rest of the screen */ |
802 | - ctlr_aclear(hSession, (rr + ns) * hSession->cols, nn * hSession->cols, 1); | 802 | + ctlr_aclear(hSession, (rr + ns) * hSession->view.cols, nn * hSession->view.cols, 1); |
803 | return DATA; | 803 | return DATA; |
804 | } | 804 | } |
805 | 805 | ||
806 | static enum lib3270_ansi_state | 806 | static enum lib3270_ansi_state |
807 | ansi_delete_chars(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | 807 | ansi_delete_chars(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) |
808 | { | 808 | { |
809 | - int cc = hSession->cursor_addr % hSession->cols; /* current col */ | ||
810 | - int mc = hSession->cols - cc; /* max chars that can be deleted */ | ||
811 | - int ns; /* chars that are shifting */ | 809 | + int cc = hSession->cursor_addr % hSession->view.cols; /* current col */ |
810 | + int mc = hSession->view.cols - cc; /* max chars that can be deleted */ | ||
811 | + int ns; /* chars that are shifting */ | ||
812 | 812 | ||
813 | if (nn < 1) | 813 | if (nn < 1) |
814 | nn = 1; | 814 | nn = 1; |
@@ -947,12 +947,12 @@ static enum lib3270_ansi_state ansi_backspace(H3270 *hSession, int GNUC_UNUSED(i | @@ -947,12 +947,12 @@ static enum lib3270_ansi_state ansi_backspace(H3270 *hSession, int GNUC_UNUSED(i | ||
947 | 947 | ||
948 | if (hSession->rev_wraparound_mode) | 948 | if (hSession->rev_wraparound_mode) |
949 | { | 949 | { |
950 | - if (hSession->cursor_addr > (hSession->scroll_top - 1) * hSession->cols) | 950 | + if (hSession->cursor_addr > (hSession->scroll_top - 1) * hSession->view.cols) |
951 | cursor_move(hSession,hSession->cursor_addr - 1); | 951 | cursor_move(hSession,hSession->cursor_addr - 1); |
952 | } | 952 | } |
953 | else | 953 | else |
954 | { | 954 | { |
955 | - if (hSession->cursor_addr % hSession->cols) | 955 | + if (hSession->cursor_addr % hSession->view.cols) |
956 | cursor_move(hSession,hSession->cursor_addr - 1); | 956 | cursor_move(hSession,hSession->cursor_addr - 1); |
957 | } | 957 | } |
958 | return DATA; | 958 | return DATA; |
@@ -960,8 +960,8 @@ static enum lib3270_ansi_state ansi_backspace(H3270 *hSession, int GNUC_UNUSED(i | @@ -960,8 +960,8 @@ static enum lib3270_ansi_state ansi_backspace(H3270 *hSession, int GNUC_UNUSED(i | ||
960 | 960 | ||
961 | static enum lib3270_ansi_state ansi_cr(H3270 *hSession, int GNUC_UNUSED(ig1), int GNUC_UNUSED(ig2)) | 961 | static enum lib3270_ansi_state ansi_cr(H3270 *hSession, int GNUC_UNUSED(ig1), int GNUC_UNUSED(ig2)) |
962 | { | 962 | { |
963 | - if (hSession->cursor_addr % hSession->cols) | ||
964 | - cursor_move(hSession,hSession->cursor_addr - (hSession->cursor_addr % hSession->cols)); | 963 | + if (hSession->cursor_addr % hSession->view.cols) |
964 | + cursor_move(hSession,hSession->cursor_addr - (hSession->cursor_addr % hSession->view.cols)); | ||
965 | 965 | ||
966 | if (hSession->auto_newline_mode) | 966 | if (hSession->auto_newline_mode) |
967 | (void) ansi_lf(hSession, 0, 0); | 967 | (void) ansi_lf(hSession, 0, 0); |
@@ -972,19 +972,19 @@ static enum lib3270_ansi_state ansi_cr(H3270 *hSession, int GNUC_UNUSED(ig1), in | @@ -972,19 +972,19 @@ static enum lib3270_ansi_state ansi_cr(H3270 *hSession, int GNUC_UNUSED(ig1), in | ||
972 | 972 | ||
973 | static enum lib3270_ansi_state ansi_lf(H3270 *hSession, int GNUC_UNUSED(ig1), int GNUC_UNUSED(ig2)) | 973 | static enum lib3270_ansi_state ansi_lf(H3270 *hSession, int GNUC_UNUSED(ig1), int GNUC_UNUSED(ig2)) |
974 | { | 974 | { |
975 | - int nc = hSession->cursor_addr + hSession->cols; | 975 | + int nc = hSession->cursor_addr + hSession->view.cols; |
976 | 976 | ||
977 | hSession->held_wrap = 0; | 977 | hSession->held_wrap = 0; |
978 | 978 | ||
979 | // If we're below the scrolling region, don't scroll. | 979 | // If we're below the scrolling region, don't scroll. |
980 | - if((hSession->cursor_addr / hSession->cols) >= hSession->scroll_bottom) | 980 | + if((hSession->cursor_addr / hSession->view.cols) >= hSession->scroll_bottom) |
981 | { | 981 | { |
982 | - if (nc < hSession->rows * hSession->cols) | 982 | + if (nc < hSession->view.rows * hSession->view.cols) |
983 | cursor_move(hSession,nc); | 983 | cursor_move(hSession,nc); |
984 | return DATA; | 984 | return DATA; |
985 | } | 985 | } |
986 | 986 | ||
987 | - if (nc < hSession->scroll_bottom * hSession->cols) | 987 | + if (nc < hSession->scroll_bottom * hSession->view.cols) |
988 | cursor_move(hSession,nc); | 988 | cursor_move(hSession,nc); |
989 | else | 989 | else |
990 | ansi_scroll(hSession); | 990 | ansi_scroll(hSession); |
@@ -993,13 +993,13 @@ static enum lib3270_ansi_state ansi_lf(H3270 *hSession, int GNUC_UNUSED(ig1), in | @@ -993,13 +993,13 @@ static enum lib3270_ansi_state ansi_lf(H3270 *hSession, int GNUC_UNUSED(ig1), in | ||
993 | 993 | ||
994 | static enum lib3270_ansi_state ansi_htab(H3270 *hSession, int GNUC_UNUSED(ig1), int GNUC_UNUSED(ig2)) | 994 | static enum lib3270_ansi_state ansi_htab(H3270 *hSession, int GNUC_UNUSED(ig1), int GNUC_UNUSED(ig2)) |
995 | { | 995 | { |
996 | - int col = hSession->cursor_addr % hSession->cols; | 996 | + int col = hSession->cursor_addr % hSession->view.cols; |
997 | int i; | 997 | int i; |
998 | 998 | ||
999 | hSession->held_wrap = 0; | 999 | hSession->held_wrap = 0; |
1000 | - if (col == hSession->cols-1) | 1000 | + if (col == hSession->view.cols-1) |
1001 | return DATA; | 1001 | return DATA; |
1002 | - for (i = col+1; i < hSession->cols-1; i++) | 1002 | + for (i = col+1; i < hSession->view.cols-1; i++) |
1003 | if (hSession->tabs[i/8] & 1<<(i%8)) | 1003 | if (hSession->tabs[i/8] & 1<<(i%8)) |
1004 | break; | 1004 | break; |
1005 | cursor_move(hSession,hSession->cursor_addr - col + i); | 1005 | cursor_move(hSession,hSession->cursor_addr - col + i); |
@@ -1018,14 +1018,14 @@ static enum lib3270_ansi_state ansi_nop(H3270 GNUC_UNUSED(*hSession), int GNUC_U | @@ -1018,14 +1018,14 @@ static enum lib3270_ansi_state ansi_nop(H3270 GNUC_UNUSED(*hSession), int GNUC_U | ||
1018 | 1018 | ||
1019 | #define PWRAP { \ | 1019 | #define PWRAP { \ |
1020 | nc = hSession->cursor_addr + 1; \ | 1020 | nc = hSession->cursor_addr + 1; \ |
1021 | - if (nc < hSession->scroll_bottom * hSession->cols) \ | 1021 | + if (nc < hSession->scroll_bottom * hSession->view.cols) \ |
1022 | cursor_move(hSession,nc); \ | 1022 | cursor_move(hSession,nc); \ |
1023 | else { \ | 1023 | else { \ |
1024 | - if (hSession->cursor_addr / hSession->cols >= hSession->scroll_bottom) \ | ||
1025 | - cursor_move(hSession,hSession->cursor_addr / hSession->cols * hSession->cols); \ | 1024 | + if (hSession->cursor_addr / hSession->view.cols >= hSession->scroll_bottom) \ |
1025 | + cursor_move(hSession,hSession->cursor_addr / hSession->view.cols * hSession->view.cols); \ | ||
1026 | else { \ | 1026 | else { \ |
1027 | ansi_scroll(hSession); \ | 1027 | ansi_scroll(hSession); \ |
1028 | - cursor_move(hSession,nc - hSession->cols); \ | 1028 | + cursor_move(hSession,nc - hSession->view.cols); \ |
1029 | } \ | 1029 | } \ |
1030 | } \ | 1030 | } \ |
1031 | } | 1031 | } |
@@ -1198,13 +1198,13 @@ ansi_printing(H3270 *hSession, int GNUC_UNUSED(ig1), int GNUC_UNUSED(ig2)) | @@ -1198,13 +1198,13 @@ ansi_printing(H3270 *hSession, int GNUC_UNUSED(ig1), int GNUC_UNUSED(ig2)) | ||
1198 | * In my opinion, very strange, but among other things, 'vi' | 1198 | * In my opinion, very strange, but among other things, 'vi' |
1199 | * depends on it! | 1199 | * depends on it! |
1200 | */ | 1200 | */ |
1201 | - if (!((hSession->cursor_addr + 1) % hSession->cols)) { | 1201 | + if (!((hSession->cursor_addr + 1) % hSession->view.cols)) { |
1202 | hSession->held_wrap = 1; | 1202 | hSession->held_wrap = 1; |
1203 | } else { | 1203 | } else { |
1204 | PWRAP; | 1204 | PWRAP; |
1205 | } | 1205 | } |
1206 | } else { | 1206 | } else { |
1207 | - if ((hSession->cursor_addr % hSession->cols) != (hSession->cols - 1)) | 1207 | + if ((hSession->cursor_addr % hSession->view.cols) != (hSession->view.cols - 1)) |
1208 | cursor_move(hSession,hSession->cursor_addr + 1); | 1208 | cursor_move(hSession,hSession->cursor_addr + 1); |
1209 | } | 1209 | } |
1210 | return DATA; | 1210 | return DATA; |
@@ -1277,10 +1277,10 @@ static enum lib3270_ansi_state ansi_digit(H3270 *hSession, int GNUC_UNUSED(ig1), | @@ -1277,10 +1277,10 @@ static enum lib3270_ansi_state ansi_digit(H3270 *hSession, int GNUC_UNUSED(ig1), | ||
1277 | 1277 | ||
1278 | static enum lib3270_ansi_state ansi_reverse_index(H3270 *hSession, int GNUC_UNUSED(ig1), int GNUC_UNUSED(ig2)) | 1278 | static enum lib3270_ansi_state ansi_reverse_index(H3270 *hSession, int GNUC_UNUSED(ig1), int GNUC_UNUSED(ig2)) |
1279 | { | 1279 | { |
1280 | - int rr = hSession->cursor_addr / hSession->cols; /* current row */ | ||
1281 | - int np = (hSession->scroll_top - 1) - rr; /* number of rows in the scrolling region, above this line */ | ||
1282 | - int ns; /* number of rows to scroll */ | ||
1283 | - int nn = 1; /* number of rows to index */ | 1280 | + int rr = hSession->cursor_addr / hSession->view.cols; /* current row */ |
1281 | + int np = (hSession->scroll_top - 1) - rr; /* number of rows in the scrolling region, above this line */ | ||
1282 | + int ns; /* number of rows to scroll */ | ||
1283 | + int nn = 1; /* number of rows to index */ | ||
1284 | 1284 | ||
1285 | hSession->held_wrap = 0; | 1285 | hSession->held_wrap = 0; |
1286 | 1286 | ||
@@ -1360,7 +1360,7 @@ static enum lib3270_ansi_state ansi_status_report(H3270 *hSession, int nn, int G | @@ -1360,7 +1360,7 @@ static enum lib3270_ansi_state ansi_status_report(H3270 *hSession, int nn, int G | ||
1360 | break; | 1360 | break; |
1361 | 1361 | ||
1362 | case 6: | 1362 | case 6: |
1363 | - (void) snprintf(cpr, 22, "\033[%d;%dR",(hSession->cursor_addr/hSession->cols) + 1, (hSession->cursor_addr%hSession->cols) + 1); | 1363 | + (void) snprintf(cpr, 22, "\033[%d;%dR",(hSession->cursor_addr/hSession->view.cols) + 1, (hSession->cursor_addr%hSession->view.cols) + 1); |
1364 | net_sends(hSession,cpr); | 1364 | net_sends(hSession,cpr); |
1365 | break; | 1365 | break; |
1366 | } | 1366 | } |
@@ -1564,10 +1564,10 @@ dec_scrolling_region(H3270 *hSession, int top, int bottom) | @@ -1564,10 +1564,10 @@ dec_scrolling_region(H3270 *hSession, int top, int bottom) | ||
1564 | { | 1564 | { |
1565 | if (top < 1) | 1565 | if (top < 1) |
1566 | top = 1; | 1566 | top = 1; |
1567 | - if (bottom > hSession->rows) | ||
1568 | - bottom = hSession->rows; | 1567 | + if (bottom > hSession->view.rows) |
1568 | + bottom = hSession->view.rows; | ||
1569 | 1569 | ||
1570 | - if (top <= bottom && (top > 1 || bottom < hSession->rows)) | 1570 | + if (top <= bottom && (top > 1 || bottom < hSession->view.rows)) |
1571 | { | 1571 | { |
1572 | hSession->scroll_top = top; | 1572 | hSession->scroll_top = top; |
1573 | hSession->scroll_bottom = bottom; | 1573 | hSession->scroll_bottom = bottom; |
@@ -1576,7 +1576,7 @@ dec_scrolling_region(H3270 *hSession, int top, int bottom) | @@ -1576,7 +1576,7 @@ dec_scrolling_region(H3270 *hSession, int top, int bottom) | ||
1576 | else | 1576 | else |
1577 | { | 1577 | { |
1578 | hSession->scroll_top = 1; | 1578 | hSession->scroll_top = 1; |
1579 | - hSession->scroll_bottom = hSession->rows; | 1579 | + hSession->scroll_bottom = hSession->view.rows; |
1580 | } | 1580 | } |
1581 | return DATA; | 1581 | return DATA; |
1582 | } | 1582 | } |
@@ -1651,7 +1651,7 @@ xterm_text_do(H3270 GNUC_UNUSED(*hSession), int GNUC_UNUSED(ig1), int GNUC_UNUSE | @@ -1651,7 +1651,7 @@ xterm_text_do(H3270 GNUC_UNUSED(*hSession), int GNUC_UNUSED(ig1), int GNUC_UNUSE | ||
1651 | static enum lib3270_ansi_state | 1651 | static enum lib3270_ansi_state |
1652 | ansi_htab_set(H3270 *hSession, int GNUC_UNUSED(ig1), int GNUC_UNUSED(ig2)) | 1652 | ansi_htab_set(H3270 *hSession, int GNUC_UNUSED(ig1), int GNUC_UNUSED(ig2)) |
1653 | { | 1653 | { |
1654 | - register int col = hSession->cursor_addr % hSession->cols; | 1654 | + register int col = hSession->cursor_addr % hSession->view.cols; |
1655 | 1655 | ||
1656 | hSession->tabs[col/8] |= 1<<(col%8); | 1656 | hSession->tabs[col/8] |= 1<<(col%8); |
1657 | return DATA; | 1657 | return DATA; |
@@ -1665,11 +1665,11 @@ ansi_htab_clear(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | @@ -1665,11 +1665,11 @@ ansi_htab_clear(H3270 *hSession, int nn, int GNUC_UNUSED(ig2)) | ||
1665 | switch (nn) | 1665 | switch (nn) |
1666 | { | 1666 | { |
1667 | case 0: | 1667 | case 0: |
1668 | - col = hSession->cursor_addr % hSession->cols; | 1668 | + col = hSession->cursor_addr % hSession->view.cols; |
1669 | hSession->tabs[col/8] &= ~(1<<(col%8)); | 1669 | hSession->tabs[col/8] &= ~(1<<(col%8)); |
1670 | break; | 1670 | break; |
1671 | case 3: | 1671 | case 3: |
1672 | - for (i = 0; i < (hSession->cols+7)/8; i++) | 1672 | + for (i = 0; i < (hSession->view.cols+7)/8; i++) |
1673 | hSession->tabs[i] = 0; | 1673 | hSession->tabs[i] = 0; |
1674 | break; | 1674 | break; |
1675 | } | 1675 | } |
@@ -1684,7 +1684,7 @@ static void ansi_scroll(H3270 *hSession) | @@ -1684,7 +1684,7 @@ static void ansi_scroll(H3270 *hSession) | ||
1684 | hSession->held_wrap = 0; | 1684 | hSession->held_wrap = 0; |
1685 | 1685 | ||
1686 | /* Save the top line */ | 1686 | /* Save the top line */ |
1687 | - if (hSession->scroll_top == 1 && hSession->scroll_bottom == hSession->rows) | 1687 | + if (hSession->scroll_top == 1 && hSession->scroll_bottom == hSession->view.rows) |
1688 | { | 1688 | { |
1689 | // if (!hSession->is_altbuffer) | 1689 | // if (!hSession->is_altbuffer) |
1690 | // scroll_save(1, False); | 1690 | // scroll_save(1, False); |
@@ -1694,13 +1694,13 @@ static void ansi_scroll(H3270 *hSession) | @@ -1694,13 +1694,13 @@ static void ansi_scroll(H3270 *hSession) | ||
1694 | 1694 | ||
1695 | /* Scroll all but the last line up */ | 1695 | /* Scroll all but the last line up */ |
1696 | if (hSession->scroll_bottom > hSession->scroll_top) | 1696 | if (hSession->scroll_bottom > hSession->scroll_top) |
1697 | - ctlr_bcopy(hSession,hSession->scroll_top * hSession->cols, | ||
1698 | - (hSession->scroll_top - 1) * hSession->cols, | ||
1699 | - (hSession->scroll_bottom - hSession->scroll_top) * hSession->cols, | 1697 | + ctlr_bcopy(hSession,hSession->scroll_top * hSession->view.cols, |
1698 | + (hSession->scroll_top - 1) * hSession->view.cols, | ||
1699 | + (hSession->scroll_bottom - hSession->scroll_top) * hSession->view.cols, | ||
1700 | 1); | 1700 | 1); |
1701 | 1701 | ||
1702 | /* Clear the last line */ | 1702 | /* Clear the last line */ |
1703 | - ctlr_aclear(hSession, (hSession->scroll_bottom - 1) * hSession->cols, hSession->cols, 1); | 1703 | + ctlr_aclear(hSession, (hSession->scroll_bottom - 1) * hSession->view.cols, hSession->view.cols, 1); |
1704 | } | 1704 | } |
1705 | 1705 | ||
1706 | /* Callback for when we enter ANSI mode. */ | 1706 | /* Callback for when we enter ANSI mode. */ |
src/core/bounds.c
@@ -61,7 +61,7 @@ LIB3270_EXPORT int lib3270_get_field_bounds(H3270 *hSession, int baddr, int *sta | @@ -61,7 +61,7 @@ LIB3270_EXPORT int lib3270_get_field_bounds(H3270 *hSession, int baddr, int *sta | ||
61 | 61 | ||
62 | if(end) | 62 | if(end) |
63 | { | 63 | { |
64 | - int maxlen = (hSession->rows * hSession->cols)-1; | 64 | + int maxlen = (hSession->view.rows * hSession->view.cols)-1; |
65 | *end = first + lib3270_field_length(hSession,first); | 65 | *end = first + lib3270_field_length(hSession,first); |
66 | if(*end > maxlen) | 66 | if(*end > maxlen) |
67 | *end = maxlen; | 67 | *end = maxlen; |
@@ -88,7 +88,7 @@ LIB3270_EXPORT int lib3270_get_word_bounds(H3270 *session, int baddr, int *start | @@ -88,7 +88,7 @@ LIB3270_EXPORT int lib3270_get_word_bounds(H3270 *session, int baddr, int *start | ||
88 | 88 | ||
89 | if(end) | 89 | if(end) |
90 | { | 90 | { |
91 | - int maxlen = session->rows * session->cols; | 91 | + int maxlen = session->view.rows * session->view.cols; |
92 | for(pos = baddr; pos < maxlen && !isspace(session->text[pos].chr);pos++); | 92 | for(pos = baddr; pos < maxlen && !isspace(session->text[pos].chr);pos++); |
93 | 93 | ||
94 | *end = pos < maxlen ? pos-1 : maxlen; | 94 | *end = pos < maxlen ? pos-1 : maxlen; |
src/core/charset.c
@@ -302,10 +302,10 @@ LIB3270_EXPORT int lib3270_charsettable(H3270 *hSession) | @@ -302,10 +302,10 @@ LIB3270_EXPORT int lib3270_charsettable(H3270 *hSession) | ||
302 | 302 | ||
303 | trace("%s","Showing charset table"); | 303 | trace("%s","Showing charset table"); |
304 | 304 | ||
305 | - (void) memset((char *) hSession->ea_buf, 0, hSession->rows*hSession->cols*sizeof(struct lib3270_ea)); | 305 | + (void) memset((char *) hSession->ea_buf, 0, hSession->view.rows * hSession->view.cols * sizeof(struct lib3270_ea)); |
306 | 306 | ||
307 | - baddr = margin_left+hSession->maxCOLS; | ||
308 | - s = (hSession->maxCOLS * 0x11); | 307 | + baddr = margin_left+hSession->max.cols; |
308 | + s = (hSession->max.cols * 0x11); | ||
309 | for(f=4;f<=0x0f;f++) | 309 | for(f=4;f<=0x0f;f++) |
310 | { | 310 | { |
311 | baddr += 2; | 311 | baddr += 2; |
@@ -316,7 +316,7 @@ LIB3270_EXPORT int lib3270_charsettable(H3270 *hSession) | @@ -316,7 +316,7 @@ LIB3270_EXPORT int lib3270_charsettable(H3270 *hSession) | ||
316 | hSession->ea_buf[baddr+s].gr = hSession->ea_buf[baddr].gr = 0; | 316 | hSession->ea_buf[baddr+s].gr = hSession->ea_buf[baddr].gr = 0; |
317 | } | 317 | } |
318 | 318 | ||
319 | - baddr = margin_left+(hSession->maxCOLS*2); | 319 | + baddr = margin_left+(hSession->max.cols*2); |
320 | s = 0x1a; | 320 | s = 0x1a; |
321 | for(f=0;f<=0x0f;f++) | 321 | for(f=0;f<=0x0f;f++) |
322 | { | 322 | { |
@@ -325,14 +325,14 @@ LIB3270_EXPORT int lib3270_charsettable(H3270 *hSession) | @@ -325,14 +325,14 @@ LIB3270_EXPORT int lib3270_charsettable(H3270 *hSession) | ||
325 | hSession->ea_buf[baddr+s].cs = hSession->ea_buf[baddr].cs = 0; | 325 | hSession->ea_buf[baddr+s].cs = hSession->ea_buf[baddr].cs = 0; |
326 | hSession->ea_buf[baddr+s].cc = hSession->ea_buf[baddr].cc = hSession->charset.asc2ebc[(int) hChars[f]]; | 326 | hSession->ea_buf[baddr+s].cc = hSession->ea_buf[baddr].cc = hSession->charset.asc2ebc[(int) hChars[f]]; |
327 | hSession->ea_buf[baddr+s].gr = hSession->ea_buf[baddr].gr = 0; | 327 | hSession->ea_buf[baddr+s].gr = hSession->ea_buf[baddr].gr = 0; |
328 | - baddr += hSession->maxCOLS; | 328 | + baddr += hSession->max.cols; |
329 | } | 329 | } |
330 | 330 | ||
331 | chr = 0x40; | 331 | chr = 0x40; |
332 | 332 | ||
333 | for(f=0;f<0x0c;f++) | 333 | for(f=0;f<0x0c;f++) |
334 | { | 334 | { |
335 | - baddr = (margin_left+(hSession->maxCOLS*2))+(f*2)+2; | 335 | + baddr = (margin_left+(hSession->max.cols*2))+(f*2)+2; |
336 | for(r=0;r<=0x0f;r++) | 336 | for(r=0;r<=0x0f;r++) |
337 | { | 337 | { |
338 | hSession->ea_buf[baddr].fg = LIB3270_ATTR_COLOR_YELLOW; | 338 | hSession->ea_buf[baddr].fg = LIB3270_ATTR_COLOR_YELLOW; |
@@ -340,11 +340,11 @@ LIB3270_EXPORT int lib3270_charsettable(H3270 *hSession) | @@ -340,11 +340,11 @@ LIB3270_EXPORT int lib3270_charsettable(H3270 *hSession) | ||
340 | hSession->ea_buf[baddr].cs = 0; | 340 | hSession->ea_buf[baddr].cs = 0; |
341 | hSession->ea_buf[baddr].cc = chr++; | 341 | hSession->ea_buf[baddr].cc = chr++; |
342 | hSession->ea_buf[baddr].gr = 0; | 342 | hSession->ea_buf[baddr].gr = 0; |
343 | - baddr += hSession->maxCOLS; | 343 | + baddr += hSession->max.cols; |
344 | } | 344 | } |
345 | } | 345 | } |
346 | 346 | ||
347 | - baddr = margin_left+0x1d+(hSession->maxCOLS*2); | 347 | + baddr = margin_left+0x1d+(hSession->max.cols*2); |
348 | for(ptr=label;*ptr;ptr++) | 348 | for(ptr=label;*ptr;ptr++) |
349 | { | 349 | { |
350 | hSession->ea_buf[baddr].fg = LIB3270_ATTR_COLOR_WHITE; | 350 | hSession->ea_buf[baddr].fg = LIB3270_ATTR_COLOR_WHITE; |
src/core/ctlr.c
@@ -97,7 +97,7 @@ static const unsigned char code_table[64] = | @@ -97,7 +97,7 @@ static const unsigned char code_table[64] = | ||
97 | #define IsBlank(c) ((c == EBC_null) || (c == EBC_space)) | 97 | #define IsBlank(c) ((c == EBC_null) || (c == EBC_space)) |
98 | 98 | ||
99 | 99 | ||
100 | -#define ALL_CHANGED(h) if(lib3270_in_ansi(h)) (h)->cbk.changed(h,0,(h)->rows*(h)->cols); | 100 | +#define ALL_CHANGED(h) if(lib3270_in_ansi(h)) (h)->cbk.changed(h,0,(h)->view.rows*(h)->view.cols); |
101 | #define REGION_CHANGED(h, f, l) if(lib3270_in_ansi(h)) (h)->cbk.changed(h,f,l) | 101 | #define REGION_CHANGED(h, f, l) if(lib3270_in_ansi(h)) (h)->cbk.changed(h,f,l) |
102 | #define ONE_CHANGED(h,n) if(lib3270_in_ansi(h)) (h)->cbk.changed(h,n,n+1); | 102 | #define ONE_CHANGED(h,n) if(lib3270_in_ansi(h)) (h)->cbk.changed(h,n,n+1); |
103 | 103 | ||
@@ -136,7 +136,7 @@ void ctlr_reinit(H3270 *session, unsigned cmask) | @@ -136,7 +136,7 @@ void ctlr_reinit(H3270 *session, unsigned cmask) | ||
136 | { | 136 | { |
137 | /* Allocate buffers */ | 137 | /* Allocate buffers */ |
138 | struct lib3270_ea *tmp; | 138 | struct lib3270_ea *tmp; |
139 | - size_t sz = (session->maxROWS * session->maxCOLS); | 139 | + size_t sz = (session->max.rows * session->max.cols); |
140 | 140 | ||
141 | session->buffer[0] = tmp = lib3270_calloc(sizeof(struct lib3270_ea), sz+1, session->buffer[0]); | 141 | session->buffer[0] = tmp = lib3270_calloc(sizeof(struct lib3270_ea), sz+1, session->buffer[0]); |
142 | session->ea_buf = tmp + 1; | 142 | session->ea_buf = tmp + 1; |
@@ -152,168 +152,6 @@ void ctlr_reinit(H3270 *session, unsigned cmask) | @@ -152,168 +152,6 @@ void ctlr_reinit(H3270 *session, unsigned cmask) | ||
152 | } | 152 | } |
153 | } | 153 | } |
154 | 154 | ||
155 | - /** | ||
156 | - * @brief Parse the model number. | ||
157 | - * | ||
158 | - * @param session Session Handle. | ||
159 | - * @param m Model number. | ||
160 | - * | ||
161 | - * @return -1 (error), 0 (default), or the specified number. | ||
162 | - */ | ||
163 | -static int parse_model_number(H3270 *session, const char *m) | ||
164 | -{ | ||
165 | - int sl; | ||
166 | - int n; | ||
167 | - | ||
168 | - if(!m) | ||
169 | - return 0; | ||
170 | - | ||
171 | - sl = strlen(m); | ||
172 | - | ||
173 | - /* An empty model number is no good. */ | ||
174 | - if (!sl) | ||
175 | - return 0; | ||
176 | - | ||
177 | - if (sl > 1) { | ||
178 | - /* | ||
179 | - * If it's longer than one character, it needs to start with | ||
180 | - * '327[89]', and it sets the m3279 resource. | ||
181 | - */ | ||
182 | - if (!strncmp(m, "3278", 4)) | ||
183 | - { | ||
184 | - session->m3279 = 0; | ||
185 | - } | ||
186 | - else if (!strncmp(m, "3279", 4)) | ||
187 | - { | ||
188 | - session->m3279 = 1; | ||
189 | - } | ||
190 | - else | ||
191 | - { | ||
192 | - return -1; | ||
193 | - } | ||
194 | - m += 4; | ||
195 | - sl -= 4; | ||
196 | - | ||
197 | - /* Check more syntax. -E is allowed, but ignored. */ | ||
198 | - switch (m[0]) { | ||
199 | - case '\0': | ||
200 | - /* Use default model number. */ | ||
201 | - return 0; | ||
202 | - case '-': | ||
203 | - /* Model number specified. */ | ||
204 | - m++; | ||
205 | - sl--; | ||
206 | - break; | ||
207 | - default: | ||
208 | - return -1; | ||
209 | - } | ||
210 | - switch (sl) { | ||
211 | - case 1: /* n */ | ||
212 | - break; | ||
213 | - case 3: /* n-E */ | ||
214 | - if (strcasecmp(m + 1, "-E")) { | ||
215 | - return -1; | ||
216 | - } | ||
217 | - break; | ||
218 | - default: | ||
219 | - return -1; | ||
220 | - } | ||
221 | - } | ||
222 | - | ||
223 | - /* Check the numeric model number. */ | ||
224 | - n = atoi(m); | ||
225 | - if (n >= 2 && n <= 5) { | ||
226 | - return n; | ||
227 | - } else { | ||
228 | - return -1; | ||
229 | - } | ||
230 | - | ||
231 | -} | ||
232 | - | ||
233 | -/** | ||
234 | - * @brief Get current 3270 model. | ||
235 | - * | ||
236 | - * @param hSession selected 3270 session. | ||
237 | - * @return Current model number. | ||
238 | - */ | ||
239 | -int lib3270_get_model_number(H3270 *hSession) | ||
240 | -{ | ||
241 | - CHECK_SESSION_HANDLE(hSession); | ||
242 | - return hSession->model_num; | ||
243 | -} | ||
244 | - | ||
245 | -const char * lib3270_get_model(H3270 *hSession) | ||
246 | -{ | ||
247 | - CHECK_SESSION_HANDLE(hSession); | ||
248 | - return hSession->model_name; | ||
249 | -} | ||
250 | - | ||
251 | -int lib3270_set_model(H3270 *hSession, const char *model) | ||
252 | -{ | ||
253 | - int ovc, ovr; | ||
254 | - char junk; | ||
255 | - int model_number; | ||
256 | - | ||
257 | - if(hSession->cstate != LIB3270_NOT_CONNECTED) | ||
258 | - return errno = EISCONN; | ||
259 | - | ||
260 | - strncpy(hSession->full_model_name,"IBM-",LIB3270_FULL_MODEL_NAME_LENGTH); | ||
261 | - hSession->model_name = &hSession->full_model_name[4]; | ||
262 | - | ||
263 | - if(!*model) | ||
264 | - model = "2"; // No model, use the default one | ||
265 | - | ||
266 | - model_number = parse_model_number(hSession,model); | ||
267 | - if (model_number < 0) | ||
268 | - { | ||
269 | - popup_an_error(hSession,"Invalid model number: %s", model); | ||
270 | - model_number = 0; | ||
271 | - } | ||
272 | - | ||
273 | - if (!model_number) | ||
274 | - { | ||
275 | -#if defined(RESTRICT_3279) | ||
276 | - model_number = 3; | ||
277 | -#else | ||
278 | - model_number = 4; | ||
279 | -#endif | ||
280 | - } | ||
281 | - | ||
282 | - if(hSession->mono) | ||
283 | - hSession->m3279 = 0; | ||
284 | - else | ||
285 | - hSession->m3279 = 1; | ||
286 | - | ||
287 | - if(!hSession->extended) | ||
288 | - hSession->oversize = CN; | ||
289 | - | ||
290 | -#if defined(RESTRICT_3279) | ||
291 | - if (hSession->m3279 && model_number == 4) | ||
292 | - model_number = 3; | ||
293 | -#endif | ||
294 | - | ||
295 | - trace("Model_number: %d",model_number); | ||
296 | - | ||
297 | - if (!hSession->extended || hSession->oversize == CN || sscanf(hSession->oversize, "%dx%d%c", &ovc, &ovr, &junk) != 2) | ||
298 | - { | ||
299 | - ovc = 0; | ||
300 | - ovr = 0; | ||
301 | - } | ||
302 | - ctlr_set_rows_cols(hSession, model_number, ovc, ovr); | ||
303 | - | ||
304 | - if (hSession->termname != CN) | ||
305 | - hSession->termtype = hSession->termname; | ||
306 | - else | ||
307 | - hSession->termtype = hSession->full_model_name; | ||
308 | - | ||
309 | - trace("Termtype: %s",hSession->termtype); | ||
310 | - | ||
311 | - ctlr_reinit(hSession,MODEL_CHANGE); | ||
312 | - screen_update(hSession,0,hSession->rows*hSession->cols); | ||
313 | - | ||
314 | - return 0; | ||
315 | -} | ||
316 | - | ||
317 | void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ovr) | 155 | void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ovr) |
318 | { | 156 | { |
319 | static const struct _sz | 157 | static const struct _sz |
@@ -340,23 +178,74 @@ void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ovr) | @@ -340,23 +178,74 @@ void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ovr) | ||
340 | update_model_info(session,mn,sz[idx].cols,sz[idx].rows); | 178 | update_model_info(session,mn,sz[idx].cols,sz[idx].rows); |
341 | 179 | ||
342 | // Apply oversize. | 180 | // Apply oversize. |
343 | - session->ov_cols = 0; | ||
344 | - session->ov_rows = 0; | 181 | + session->oversize.cols = 0; |
182 | + session->oversize.rows = 0; | ||
345 | if (ovc != 0 || ovr != 0) | 183 | if (ovc != 0 || ovr != 0) |
346 | { | 184 | { |
347 | if (ovc <= 0 || ovr <= 0) | 185 | if (ovc <= 0 || ovr <= 0) |
348 | - popup_an_error(session,"Invalid %s %dx%d:\nNegative or zero",ResOversize, ovc, ovr); | 186 | + { |
187 | + lib3270_popup_dialog( | ||
188 | + session, | ||
189 | + LIB3270_NOTIFY_ERROR, | ||
190 | + _( "Invalid oversize" ), | ||
191 | + _( "The oversize values are invalid." ), \ | ||
192 | + _( "%dx%d is negative or zero" ), | ||
193 | + ovc, ovr | ||
194 | + ); | ||
195 | + | ||
196 | + // popup_an_error(session,"Invalid %s %dx%d:\nNegative or zero",ResOversize, ovc, ovr); | ||
197 | + | ||
198 | + } | ||
349 | else if (ovc * ovr >= 0x4000) | 199 | else if (ovc * ovr >= 0x4000) |
350 | - popup_an_error(session,"Invalid %s %dx%d:\nToo big",ResOversize, ovc, ovr); | ||
351 | - else if (ovc > 0 && ovc < session->maxCOLS) | ||
352 | - popup_an_error(session,"Invalid %s cols (%d):\nLess than model %d cols (%d)",ResOversize, ovc, session->model_num, session->maxCOLS); | ||
353 | - else if (ovr > 0 && ovr < session->maxROWS) | ||
354 | - popup_an_error(session,"Invalid %s rows (%d):\nLess than model %d rows (%d)",ResOversize, ovr, session->model_num, session->maxROWS); | 200 | + { |
201 | + lib3270_popup_dialog( | ||
202 | + session, | ||
203 | + LIB3270_NOTIFY_ERROR, | ||
204 | + _( "Invalid oversize" ), | ||
205 | + _( "The oversize values are too big." ), \ | ||
206 | + _( "%dx%d screen size is bigger than the maximum size" ), | ||
207 | + ovc, ovr | ||
208 | + ); | ||
209 | + | ||
210 | +// popup_an_error(session,"Invalid %s %dx%d:\nToo big",ResOversize, ovc, ovr); | ||
211 | + | ||
212 | + } | ||
213 | + else if (ovc > 0 && ovc < session->max.cols) | ||
214 | + { | ||
215 | + | ||
216 | + lib3270_popup_dialog( | ||
217 | + session, | ||
218 | + LIB3270_NOTIFY_ERROR, | ||
219 | + _( "Invalid oversize" ), | ||
220 | + _( "The oversize width is too small." ), \ | ||
221 | + _( "The width %d is less than model %d columns (%d)" ), | ||
222 | + ovc, session->model_num, session->max.cols | ||
223 | + ); | ||
224 | + | ||
225 | +// popup_an_error(session,"Invalid %s cols (%d):\nLess than model %d cols (%d)",ResOversize, ovc, session->model_num, session->maxCOLS); | ||
226 | + } | ||
227 | + else if (ovr > 0 && ovr < session->max.rows) | ||
228 | + { | ||
229 | + | ||
230 | + lib3270_popup_dialog( | ||
231 | + session, | ||
232 | + LIB3270_NOTIFY_ERROR, | ||
233 | + _( "Invalid oversize" ), | ||
234 | + _( "The oversize height is too small." ), \ | ||
235 | + _( "The height %d is less than model %d rows (%d)" ), | ||
236 | + ovr, session->model_num, session->max.rows | ||
237 | + ); | ||
238 | + | ||
239 | +// popup_an_error(session,"Invalid %s rows (%d):\nLess than model %d rows (%d)",ResOversize, ovr, session->model_num, session->maxROWS); | ||
240 | + | ||
241 | + } | ||
355 | else | 242 | else |
356 | - update_model_info(session,mn,session->ov_cols = ovc,session->ov_rows = ovr); | 243 | + { |
244 | + update_model_info(session,mn,session->oversize.cols = ovc,session->oversize.rows = ovr); | ||
245 | + } | ||
357 | } | 246 | } |
358 | 247 | ||
359 | - set_viewsize(session,sz[idx].rows,sz[idx].cols); | 248 | + set_viewsize(session,session->max.rows,session->max.cols); |
360 | 249 | ||
361 | } | 250 | } |
362 | 251 | ||
@@ -636,8 +525,8 @@ LIB3270_EXPORT int lib3270_get_next_unprotected(H3270 *hSession, int baddr0) | @@ -636,8 +525,8 @@ LIB3270_EXPORT int lib3270_get_next_unprotected(H3270 *hSession, int baddr0) | ||
636 | return 0; | 525 | return 0; |
637 | } | 526 | } |
638 | 527 | ||
639 | -LIB3270_EXPORT int lib3270_get_is_protected_at(H3270 *h, int row, int col) { | ||
640 | - return lib3270_get_is_protected(h, ((row-1) * h->cols) + (col-1)); | 528 | +LIB3270_EXPORT int lib3270_get_is_protected_at(H3270 *h, unsigned int row, unsigned int col) { |
529 | + return lib3270_get_is_protected(h, ((row-1) * h->view.cols) + (col-1)); | ||
641 | } | 530 | } |
642 | 531 | ||
643 | LIB3270_EXPORT int lib3270_get_is_protected(H3270 *hSession, int baddr) | 532 | LIB3270_EXPORT int lib3270_get_is_protected(H3270 *hSession, int baddr) |
@@ -659,7 +548,7 @@ LIB3270_EXPORT int lib3270_is_protected(H3270 *h, unsigned int baddr) | @@ -659,7 +548,7 @@ LIB3270_EXPORT int lib3270_is_protected(H3270 *h, unsigned int baddr) | ||
659 | 548 | ||
660 | 549 | ||
661 | /** | 550 | /** |
662 | - * Perform an erase command, which may include changing the (virtual) screen size. | 551 | + * @brief Perform an erase command, which may include changing the (virtual) screen size. |
663 | * | 552 | * |
664 | */ | 553 | */ |
665 | void ctlr_erase(H3270 *session, int alt) | 554 | void ctlr_erase(H3270 *session, int alt) |
@@ -677,13 +566,12 @@ void ctlr_erase(H3270 *session, int alt) | @@ -677,13 +566,12 @@ void ctlr_erase(H3270 *session, int alt) | ||
677 | { | 566 | { |
678 | // Going from 24x80 to maximum. | 567 | // Going from 24x80 to maximum. |
679 | session->cbk.display(session); | 568 | session->cbk.display(session); |
680 | - | ||
681 | - set_viewsize(session,session->maxROWS,session->maxCOLS); | 569 | + set_viewsize(session,session->max.rows,session->max.cols); |
682 | } | 570 | } |
683 | else | 571 | else |
684 | { | 572 | { |
685 | // Going from maximum to 24x80. | 573 | // Going from maximum to 24x80. |
686 | - if (session->maxROWS > 24 || session->maxCOLS > 80) | 574 | + if (session->max.rows > 24 || session->max.cols > 80) |
687 | { | 575 | { |
688 | if(session->vcontrol) | 576 | if(session->vcontrol) |
689 | { | 577 | { |
@@ -694,7 +582,7 @@ void ctlr_erase(H3270 *session, int alt) | @@ -694,7 +582,7 @@ void ctlr_erase(H3270 *session, int alt) | ||
694 | if(lib3270_get_toggle(session,LIB3270_TOGGLE_ALTSCREEN)) | 582 | if(lib3270_get_toggle(session,LIB3270_TOGGLE_ALTSCREEN)) |
695 | set_viewsize(session,24,80); | 583 | set_viewsize(session,24,80); |
696 | else | 584 | else |
697 | - set_viewsize(session,session->maxROWS,80); | 585 | + set_viewsize(session,session->max.rows,80); |
698 | } | 586 | } |
699 | } | 587 | } |
700 | 588 | ||
@@ -702,8 +590,8 @@ void ctlr_erase(H3270 *session, int alt) | @@ -702,8 +590,8 @@ void ctlr_erase(H3270 *session, int alt) | ||
702 | 590 | ||
703 | } | 591 | } |
704 | 592 | ||
705 | -/* | ||
706 | - * Interpret an incoming 3270 command. | 593 | +/** |
594 | + * @brief Interpret an incoming 3270 command. | ||
707 | */ | 595 | */ |
708 | enum pds process_ds(H3270 *hSession, unsigned char *buf, int buflen) | 596 | enum pds process_ds(H3270 *hSession, unsigned char *buf, int buflen) |
709 | { | 597 | { |
@@ -943,7 +831,7 @@ void ctlr_read_modified(H3270 *hSession, unsigned char aid_byte, Boolean all) | @@ -943,7 +831,7 @@ void ctlr_read_modified(H3270 *hSession, unsigned char aid_byte, Boolean all) | ||
943 | space3270out(hSession,3); | 831 | space3270out(hSession,3); |
944 | *hSession->obptr++ = ORDER_SBA; | 832 | *hSession->obptr++ = ORDER_SBA; |
945 | ENCODE_BADDR(hSession->obptr, baddr); | 833 | ENCODE_BADDR(hSession->obptr, baddr); |
946 | - trace_ds(hSession," SetBufferAddress%s (Cols: %d Rows: %d)", rcba(hSession,baddr), hSession->cols, hSession->rows); | 834 | + trace_ds(hSession," SetBufferAddress%s (Cols: %d Rows: %d)", rcba(hSession,baddr), hSession->view.cols, hSession->view.rows); |
947 | while (!hSession->ea_buf[baddr].fa) | 835 | while (!hSession->ea_buf[baddr].fa) |
948 | { | 836 | { |
949 | 837 | ||
@@ -1357,7 +1245,7 @@ enum pds ctlr_write(H3270 *hSession, unsigned char buf[], int buflen, Boolean er | @@ -1357,7 +1245,7 @@ enum pds ctlr_write(H3270 *hSession, unsigned char buf[], int buflen, Boolean er | ||
1357 | END_TEXT("SetBufferAddress"); | 1245 | END_TEXT("SetBufferAddress"); |
1358 | previous = SBA; | 1246 | previous = SBA; |
1359 | trace_ds(hSession,"%s",rcba(hSession,hSession->buffer_addr)); | 1247 | trace_ds(hSession,"%s",rcba(hSession,hSession->buffer_addr)); |
1360 | - if(hSession->buffer_addr >= hSession->cols * hSession->rows) | 1248 | + if(hSession->buffer_addr >= hSession->view.cols * hSession->view.rows) |
1361 | { | 1249 | { |
1362 | ABORT_WRITE("invalid SBA address"); | 1250 | ABORT_WRITE("invalid SBA address"); |
1363 | } | 1251 | } |
@@ -1508,7 +1396,7 @@ enum pds ctlr_write(H3270 *hSession, unsigned char buf[], int buflen, Boolean er | @@ -1508,7 +1396,7 @@ enum pds ctlr_write(H3270 *hSession, unsigned char buf[], int buflen, Boolean er | ||
1508 | trace_ds(hSession,"'"); | 1396 | trace_ds(hSession,"'"); |
1509 | 1397 | ||
1510 | } | 1398 | } |
1511 | - if (baddr >= hSession->cols * hSession->rows) | 1399 | + if (baddr >= hSession->view.cols * hSession->view.rows) |
1512 | { | 1400 | { |
1513 | ABORT_WRITE("invalid RA address"); | 1401 | ABORT_WRITE("invalid RA address"); |
1514 | } | 1402 | } |
@@ -1556,7 +1444,7 @@ enum pds ctlr_write(H3270 *hSession, unsigned char buf[], int buflen, Boolean er | @@ -1556,7 +1444,7 @@ enum pds ctlr_write(H3270 *hSession, unsigned char buf[], int buflen, Boolean er | ||
1556 | trace_ds(hSession,"%s",rcba(hSession,baddr)); | 1444 | trace_ds(hSession,"%s",rcba(hSession,baddr)); |
1557 | 1445 | ||
1558 | previous = ORDER; | 1446 | previous = ORDER; |
1559 | - if (baddr >= hSession->cols * hSession->rows) | 1447 | + if (baddr >= hSession->view.cols * hSession->view.rows) |
1560 | { | 1448 | { |
1561 | ABORT_WRITE("invalid EUA address"); | 1449 | ABORT_WRITE("invalid EUA address"); |
1562 | } | 1450 | } |
@@ -1861,7 +1749,7 @@ enum pds ctlr_write(H3270 *hSession, unsigned char buf[], int buflen, Boolean er | @@ -1861,7 +1749,7 @@ enum pds ctlr_write(H3270 *hSession, unsigned char buf[], int buflen, Boolean er | ||
1861 | DEC_BA(baddr); | 1749 | DEC_BA(baddr); |
1862 | while (!aborted && | 1750 | while (!aborted && |
1863 | ((fa_addr >= 0 && baddr != fa_addr) || | 1751 | ((fa_addr >= 0 && baddr != fa_addr) || |
1864 | - (fa_addr < 0 && baddr != hSession->rows*hSession->cols - 1))) { | 1752 | + (fa_addr < 0 && baddr != hSession->view.rows*hSession->view.cols - 1))) { |
1865 | if (hSession->ea_buf[baddr].cc == FCORDER_SI) { | 1753 | if (hSession->ea_buf[baddr].cc == FCORDER_SI) { |
1866 | ABORT_WRITE("double SI"); | 1754 | ABORT_WRITE("double SI"); |
1867 | } | 1755 | } |
@@ -2069,8 +1957,8 @@ void ctlr_write_sscp_lu(H3270 *hSession, unsigned char buf[], int buflen) | @@ -2069,8 +1957,8 @@ void ctlr_write_sscp_lu(H3270 *hSession, unsigned char buf[], int buflen) | ||
2069 | * Insert NULLs to the end of the line and advance to | 1957 | * Insert NULLs to the end of the line and advance to |
2070 | * the beginning of the next line. | 1958 | * the beginning of the next line. |
2071 | */ | 1959 | */ |
2072 | - s_row = hSession->buffer_addr / hSession->cols; | ||
2073 | - while ((hSession->buffer_addr / hSession->cols) == s_row) | 1960 | + s_row = hSession->buffer_addr / hSession->view.cols; |
1961 | + while ((hSession->buffer_addr / hSession->view.cols) == s_row) | ||
2074 | { | 1962 | { |
2075 | ctlr_add(hSession,hSession->buffer_addr, EBC_null, hSession->default_cs); | 1963 | ctlr_add(hSession,hSession->buffer_addr, EBC_null, hSession->default_cs); |
2076 | ctlr_add_fg(hSession,hSession->buffer_addr, hSession->default_fg); | 1964 | ctlr_add_fg(hSession,hSession->buffer_addr, hSession->default_fg); |
@@ -2450,7 +2338,7 @@ int ctlr_any_data(H3270 *session) | @@ -2450,7 +2338,7 @@ int ctlr_any_data(H3270 *session) | ||
2450 | { | 2338 | { |
2451 | register int i; | 2339 | register int i; |
2452 | 2340 | ||
2453 | - for(i = 0; i < session->rows*session->cols; i++) | 2341 | + for(i = 0; i < session->view.rows * session->view.cols; i++) |
2454 | { | 2342 | { |
2455 | if (!IsBlank(session->ea_buf[i].cc)) | 2343 | if (!IsBlank(session->ea_buf[i].cc)) |
2456 | return 1; | 2344 | return 1; |
@@ -2477,7 +2365,7 @@ void ctlr_clear(H3270 *session, Boolean can_snap) | @@ -2477,7 +2365,7 @@ void ctlr_clear(H3270 *session, Boolean can_snap) | ||
2477 | #endif | 2365 | #endif |
2478 | 2366 | ||
2479 | /* Clear the screen. */ | 2367 | /* Clear the screen. */ |
2480 | - (void) memset((char *)session->ea_buf, 0, session->rows*session->cols*sizeof(struct lib3270_ea)); | 2368 | + (void) memset((char *)session->ea_buf, 0, session->view.rows * session->view.cols * sizeof(struct lib3270_ea)); |
2481 | cursor_move(session,0); | 2369 | cursor_move(session,0); |
2482 | session->buffer_addr = 0; | 2370 | session->buffer_addr = 0; |
2483 | 2371 | ||
@@ -2506,7 +2394,7 @@ static void ctlr_blanks(H3270 *session) | @@ -2506,7 +2394,7 @@ static void ctlr_blanks(H3270 *session) | ||
2506 | { | 2394 | { |
2507 | int baddr; | 2395 | int baddr; |
2508 | 2396 | ||
2509 | - for (baddr = 0; baddr < session->rows*session->cols; baddr++) | 2397 | + for (baddr = 0; baddr < session->view.rows * session->view.cols; baddr++) |
2510 | { | 2398 | { |
2511 | if (!session->ea_buf[baddr].fa) | 2399 | if (!session->ea_buf[baddr].fa) |
2512 | session->ea_buf[baddr].cc = EBC_space; | 2400 | session->ea_buf[baddr].cc = EBC_space; |
@@ -2634,8 +2522,8 @@ static void ctlr_add_ic(H3270 *hSession, int baddr, unsigned char ic) | @@ -2634,8 +2522,8 @@ static void ctlr_add_ic(H3270 *hSession, int baddr, unsigned char ic) | ||
2634 | hSession->ea_buf[baddr].ic = ic; | 2522 | hSession->ea_buf[baddr].ic = ic; |
2635 | } | 2523 | } |
2636 | 2524 | ||
2637 | -/* | ||
2638 | - * Wrapping bersion of ctlr_bcopy. | 2525 | +/** |
2526 | + * @brief Wrapping bersion of ctlr_bcopy. | ||
2639 | */ | 2527 | */ |
2640 | void ctlr_wrapping_memmove(H3270 *hSession, int baddr_to, int baddr_from, int count) | 2528 | void ctlr_wrapping_memmove(H3270 *hSession, int baddr_to, int baddr_from, int count) |
2641 | { | 2529 | { |
@@ -2647,8 +2535,8 @@ void ctlr_wrapping_memmove(H3270 *hSession, int baddr_to, int baddr_from, int co | @@ -2647,8 +2535,8 @@ void ctlr_wrapping_memmove(H3270 *hSession, int baddr_to, int baddr_from, int co | ||
2647 | * It's faster to figure out if none of this is true, then do a slow | 2535 | * It's faster to figure out if none of this is true, then do a slow |
2648 | * location-at-a-time version only if it happens. | 2536 | * location-at-a-time version only if it happens. |
2649 | */ | 2537 | */ |
2650 | - if (baddr_from + count <= hSession->rows*hSession->cols && | ||
2651 | - baddr_to + count <= hSession->rows*hSession->cols) { | 2538 | + if (baddr_from + count <= hSession->view.rows * hSession->view.cols && |
2539 | + baddr_to + count <= hSession->view.rows * hSession->view.cols) { | ||
2652 | ctlr_bcopy(hSession,baddr_from, baddr_to, count, True); | 2540 | ctlr_bcopy(hSession,baddr_from, baddr_to, count, True); |
2653 | } else { | 2541 | } else { |
2654 | int i, from, to; | 2542 | int i, from, to; |
@@ -2656,12 +2544,12 @@ void ctlr_wrapping_memmove(H3270 *hSession, int baddr_to, int baddr_from, int co | @@ -2656,12 +2544,12 @@ void ctlr_wrapping_memmove(H3270 *hSession, int baddr_to, int baddr_from, int co | ||
2656 | for (i = 0; i < count; i++) { | 2544 | for (i = 0; i < count; i++) { |
2657 | if (baddr_to > baddr_from) { | 2545 | if (baddr_to > baddr_from) { |
2658 | /* Shifting right, move left. */ | 2546 | /* Shifting right, move left. */ |
2659 | - to = (baddr_to + count - 1 - i) % hSession->rows*hSession->cols; | ||
2660 | - from = (baddr_from + count - 1 - i) % hSession->rows*hSession->cols; | 2547 | + to = (baddr_to + count - 1 - i) % hSession->view.rows * hSession->view.cols; |
2548 | + from = (baddr_from + count - 1 - i) % hSession->view.rows * hSession->view.cols; | ||
2661 | } else { | 2549 | } else { |
2662 | /* Shifting left, move right. */ | 2550 | /* Shifting left, move right. */ |
2663 | - to = (baddr_to + i) % hSession->rows*hSession->cols; | ||
2664 | - from = (baddr_from + i) % hSession->rows*hSession->cols; | 2551 | + to = (baddr_to + i) % hSession->view.rows * hSession->view.cols; |
2552 | + from = (baddr_from + i) % hSession->view.rows * hSession->view.cols; | ||
2665 | } | 2553 | } |
2666 | ctlr_bcopy(hSession,from, to, 1, True); | 2554 | ctlr_bcopy(hSession,from, to, 1, True); |
2667 | } | 2555 | } |
@@ -2714,7 +2602,7 @@ void ctlr_aclear(H3270 *hSession, int baddr, int count, int GNUC_UNUSED(clear_ea | @@ -2714,7 +2602,7 @@ void ctlr_aclear(H3270 *hSession, int baddr, int count, int GNUC_UNUSED(clear_ea | ||
2714 | */ | 2602 | */ |
2715 | void ctlr_scroll(H3270 *hSession) | 2603 | void ctlr_scroll(H3270 *hSession) |
2716 | { | 2604 | { |
2717 | - int qty = (hSession->rows - 1) * hSession->cols; | 2605 | + int qty = (hSession->view.rows - 1) * hSession->view.cols; |
2718 | 2606 | ||
2719 | /* Make sure nothing is selected. (later this can be fixed) */ | 2607 | /* Make sure nothing is selected. (later this can be fixed) */ |
2720 | // unselect(0, ROWS*COLS); | 2608 | // unselect(0, ROWS*COLS); |
@@ -2722,10 +2610,10 @@ void ctlr_scroll(H3270 *hSession) | @@ -2722,10 +2610,10 @@ void ctlr_scroll(H3270 *hSession) | ||
2722 | /* Synchronize pending changes prior to this. */ | 2610 | /* Synchronize pending changes prior to this. */ |
2723 | 2611 | ||
2724 | /* Move ea_buf. */ | 2612 | /* Move ea_buf. */ |
2725 | - (void) memmove(&hSession->ea_buf[0], &hSession->ea_buf[hSession->cols],qty * sizeof(struct lib3270_ea)); | 2613 | + (void) memmove(&hSession->ea_buf[0], &hSession->ea_buf[hSession->view.cols],qty * sizeof(struct lib3270_ea)); |
2726 | 2614 | ||
2727 | /* Clear the last line. */ | 2615 | /* Clear the last line. */ |
2728 | - (void) memset((char *) &hSession->ea_buf[qty], 0, hSession->cols * sizeof(struct lib3270_ea)); | 2616 | + (void) memset((char *) &hSession->ea_buf[qty], 0, hSession->view.cols * sizeof(struct lib3270_ea)); |
2729 | 2617 | ||
2730 | hSession->cbk.display(hSession); | 2618 | hSession->cbk.display(hSession); |
2731 | 2619 |
src/core/cursor.c
@@ -263,9 +263,9 @@ static int cursor_up(H3270 *hSession) | @@ -263,9 +263,9 @@ static int cursor_up(H3270 *hSession) | ||
263 | } | 263 | } |
264 | #endif /*]*/ | 264 | #endif /*]*/ |
265 | 265 | ||
266 | - baddr = hSession->cursor_addr - hSession->cols; | 266 | + baddr = hSession->cursor_addr - hSession->view.cols; |
267 | if (baddr < 0) | 267 | if (baddr < 0) |
268 | - baddr = (hSession->cursor_addr + (hSession->rows * hSession->cols)) - hSession->cols; | 268 | + baddr = (hSession->cursor_addr + (hSession->view.rows * hSession->view.cols)) - hSession->view.cols; |
269 | cursor_move(hSession,baddr); | 269 | cursor_move(hSession,baddr); |
270 | return 0; | 270 | return 0; |
271 | } | 271 | } |
@@ -294,7 +294,7 @@ static int cursor_down(H3270 *hSession) | @@ -294,7 +294,7 @@ static int cursor_down(H3270 *hSession) | ||
294 | return 0; | 294 | return 0; |
295 | } | 295 | } |
296 | #endif /*]*/ | 296 | #endif /*]*/ |
297 | - baddr = (hSession->cursor_addr + hSession->cols) % (hSession->cols * hSession->rows); | 297 | + baddr = (hSession->cursor_addr + hSession->view.cols) % (hSession->view.cols * hSession->view.rows); |
298 | cursor_move(hSession,baddr); | 298 | cursor_move(hSession,baddr); |
299 | return 0; | 299 | return 0; |
300 | } | 300 | } |
src/core/keyboard/actions.c
@@ -201,7 +201,8 @@ LIB3270_EXPORT int lib3270_firstfield(H3270 *hSession) | @@ -201,7 +201,8 @@ LIB3270_EXPORT int lib3270_firstfield(H3270 *hSession) | ||
201 | cursor_move(hSession,0); | 201 | cursor_move(hSession,0); |
202 | return 0; | 202 | return 0; |
203 | } | 203 | } |
204 | - cursor_move(hSession,lib3270_get_next_unprotected(hSession,hSession->rows*hSession->cols-1)); | 204 | + |
205 | + cursor_move(hSession,lib3270_get_next_unprotected(hSession,hSession->view.rows * hSession->view.cols-1)); | ||
205 | 206 | ||
206 | return 0; | 207 | return 0; |
207 | } | 208 | } |
@@ -288,9 +289,9 @@ static Boolean do_delete(H3270 *hSession) | @@ -288,9 +289,9 @@ static Boolean do_delete(H3270 *hSession) | ||
288 | } | 289 | } |
289 | else | 290 | else |
290 | { | 291 | { |
291 | - if ((baddr % hSession->cols) == hSession->cols - ndel) | 292 | + if ((baddr % hSession->view.cols) == hSession->view.cols - ndel) |
292 | return True; | 293 | return True; |
293 | - end_baddr = baddr + (hSession->cols - (baddr % hSession->cols)) - 1; | 294 | + end_baddr = baddr + (hSession->view.cols - (baddr % hSession->view.cols)) - 1; |
294 | } | 295 | } |
295 | 296 | ||
296 | /* Shift the remainder of the field left. */ | 297 | /* Shift the remainder of the field left. */ |
@@ -301,8 +302,8 @@ static Boolean do_delete(H3270 *hSession) | @@ -301,8 +302,8 @@ static Boolean do_delete(H3270 *hSession) | ||
301 | else if (end_baddr != baddr) | 302 | else if (end_baddr != baddr) |
302 | { | 303 | { |
303 | /* XXX: Need to verify this. */ | 304 | /* XXX: Need to verify this. */ |
304 | - ctlr_bcopy(hSession,baddr + ndel, baddr,((hSession->rows * hSession->cols) - 1) - (baddr + ndel) + 1, 0); | ||
305 | - ctlr_bcopy(hSession,0, (hSession->rows * hSession->cols) - ndel, ndel, 0); | 305 | + ctlr_bcopy(hSession,baddr + ndel, baddr,((hSession->view.rows * hSession->view.cols) - 1) - (baddr + ndel) + 1, 0); |
306 | + ctlr_bcopy(hSession,0, (hSession->view.rows * hSession->view.cols) - ndel, ndel, 0); | ||
306 | ctlr_bcopy(hSession,ndel, 0, end_baddr - ndel + 1, 0); | 307 | ctlr_bcopy(hSession,ndel, 0, end_baddr - ndel + 1, 0); |
307 | } | 308 | } |
308 | 309 |
src/core/keyboard/kybd.c
@@ -574,7 +574,7 @@ static Boolean ins_prep(H3270 *hSession, int faddr, int baddr, int count) | @@ -574,7 +574,7 @@ static Boolean ins_prep(H3270 *hSession, int faddr, int baddr, int count) | ||
574 | if (faddr == -1) | 574 | if (faddr == -1) |
575 | { | 575 | { |
576 | /* Unformatted. Use the end of the line. */ | 576 | /* Unformatted. Use the end of the line. */ |
577 | - next_faddr = (((baddr / hSession->cols) + 1) * hSession->cols) % (hSession->rows*hSession->cols); | 577 | + next_faddr = (((baddr / hSession->view.cols) + 1) * hSession->view.cols) % (hSession->view.rows*hSession->view.cols); |
578 | } | 578 | } |
579 | else | 579 | else |
580 | { | 580 | { |
@@ -639,8 +639,8 @@ static Boolean ins_prep(H3270 *hSession, int faddr, int baddr, int count) | @@ -639,8 +639,8 @@ static Boolean ins_prep(H3270 *hSession, int faddr, int baddr, int count) | ||
639 | /* Shift right n_nulls worth. */ | 639 | /* Shift right n_nulls worth. */ |
640 | copy_len = first_null - baddr; | 640 | copy_len = first_null - baddr; |
641 | if (copy_len < 0) | 641 | if (copy_len < 0) |
642 | - copy_len += hSession->rows*hSession->cols; | ||
643 | - to = (baddr + n_nulls) % (hSession->rows*hSession->cols); | 642 | + copy_len += hSession->view.rows * hSession->view.cols; |
643 | + to = (baddr + n_nulls) % (hSession->view.rows * hSession->view.cols); | ||
644 | /* | 644 | /* |
645 | #if defined(_ST) | 645 | #if defined(_ST) |
646 | printf("found %d NULLs at %d\n", n_nulls, first_null); | 646 | printf("found %d NULLs at %d\n", n_nulls, first_null); |
@@ -876,7 +876,7 @@ static Boolean key_Character(H3270 *hSession, int code, Boolean with_ge, Boolean | @@ -876,7 +876,7 @@ static Boolean key_Character(H3270 *hSession, int code, Boolean with_ge, Boolean | ||
876 | while (baddr_fill != faddr) { | 876 | while (baddr_fill != faddr) { |
877 | 877 | ||
878 | /* Check for backward line wrap. */ | 878 | /* Check for backward line wrap. */ |
879 | - if ((baddr_fill % hSession->cols) == hSession->cols - 1) | 879 | + if ((baddr_fill % hSession->view.cols) == hSession->view.cols - 1) |
880 | { | 880 | { |
881 | Boolean aborted = True; | 881 | Boolean aborted = True; |
882 | register int baddr_scan = baddr_fill; | 882 | register int baddr_scan = baddr_fill; |
@@ -891,7 +891,7 @@ static Boolean key_Character(H3270 *hSession, int code, Boolean with_ge, Boolean | @@ -891,7 +891,7 @@ static Boolean key_Character(H3270 *hSession, int code, Boolean with_ge, Boolean | ||
891 | aborted = False; | 891 | aborted = False; |
892 | break; | 892 | break; |
893 | } | 893 | } |
894 | - if (!(baddr_scan % hSession->cols)) | 894 | + if (!(baddr_scan % hSession->view.cols)) |
895 | break; | 895 | break; |
896 | DEC_BA(baddr_scan); | 896 | DEC_BA(baddr_scan); |
897 | } | 897 | } |
@@ -947,7 +947,7 @@ LIB3270_EXPORT int lib3270_input_string(H3270 *hSession, const unsigned char *st | @@ -947,7 +947,7 @@ LIB3270_EXPORT int lib3270_input_string(H3270 *hSession, const unsigned char *st | ||
947 | for(pos = 0; pos < length && str[pos] && !rc; pos++) | 947 | for(pos = 0; pos < length && str[pos] && !rc; pos++) |
948 | rc = key_ACharacter(hSession,(str[pos] & 0xff), KT_STD, IA_KEY, NULL); | 948 | rc = key_ACharacter(hSession,(str[pos] & 0xff), KT_STD, IA_KEY, NULL); |
949 | 949 | ||
950 | - screen_update(hSession,0,hSession->rows*hSession->cols); | 950 | + screen_update(hSession,0,hSession->view.rows * hSession->view.cols); |
951 | 951 | ||
952 | return rc; | 952 | return rc; |
953 | } | 953 | } |
@@ -1228,8 +1228,8 @@ LIB3270_EXPORT int lib3270_newline(H3270 *hSession) | @@ -1228,8 +1228,8 @@ LIB3270_EXPORT int lib3270_newline(H3270 *hSession) | ||
1228 | return 0; | 1228 | return 0; |
1229 | } | 1229 | } |
1230 | #endif /*]*/ | 1230 | #endif /*]*/ |
1231 | - baddr = (hSession->cursor_addr + hSession->cols) % (hSession->cols * hSession->rows); /* down */ | ||
1232 | - baddr = (baddr / hSession->cols) * hSession->cols; /* 1st col */ | 1231 | + baddr = (hSession->cursor_addr + hSession->view.cols) % (hSession->view.cols * hSession->view.rows); /* down */ |
1232 | + baddr = (baddr / hSession->view.cols) * hSession->view.cols; /* 1st col */ | ||
1233 | faddr = lib3270_field_addr(hSession,baddr); | 1233 | faddr = lib3270_field_addr(hSession,baddr); |
1234 | fa = hSession->ea_buf[faddr].fa; | 1234 | fa = hSession->ea_buf[faddr].fa; |
1235 | if (faddr != baddr && !FA_IS_PROTECTED(fa)) | 1235 | if (faddr != baddr && !FA_IS_PROTECTED(fa)) |
@@ -0,0 +1,222 @@ | @@ -0,0 +1,222 @@ | ||
1 | +/* | ||
2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob o nome G3270. | ||
5 | + * | ||
6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
7 | + * | ||
8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
10 | + * Free Software Foundation. | ||
11 | + * | ||
12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
15 | + * obter mais detalhes. | ||
16 | + * | ||
17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | ||
19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | ||
20 | + * | ||
21 | + * Este programa está nomeado como - e possui - linhas de código. | ||
22 | + * | ||
23 | + * Contatos: | ||
24 | + * | ||
25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
27 | + * | ||
28 | + */ | ||
29 | + | ||
30 | + #include <lib3270-internals.h> | ||
31 | + #include "screen.h" | ||
32 | + #include "ctlrc.h" | ||
33 | + #include "popupsc.h" | ||
34 | + #include <lib3270/trace.h> | ||
35 | + #include <lib3270/log.h> | ||
36 | + | ||
37 | + const char * lib3270_get_oversize(H3270 *hSession) | ||
38 | + { | ||
39 | + return hSession->oversize.str; | ||
40 | + } | ||
41 | + | ||
42 | + int lib3270_set_oversize(H3270 *hSession, const char GNUC_UNUSED(*value)) | ||
43 | + { | ||
44 | + if(hSession->cstate != LIB3270_NOT_CONNECTED) | ||
45 | + return errno = EISCONN; | ||
46 | + | ||
47 | + if(!hSession->extended) | ||
48 | + return errno = ENOTSUP; | ||
49 | + | ||
50 | + // TODO: Implement it! | ||
51 | + // Replace(hSession->oversize.str,value); | ||
52 | + | ||
53 | + return errno = ENOTSUP; | ||
54 | + | ||
55 | + } | ||
56 | + | ||
57 | +/** | ||
58 | + * @brief Get current 3270 model. | ||
59 | + * | ||
60 | + * @param hSession selected 3270 session. | ||
61 | + * @return Current model number. | ||
62 | + */ | ||
63 | +int lib3270_get_model_number(H3270 *hSession) | ||
64 | +{ | ||
65 | + CHECK_SESSION_HANDLE(hSession); | ||
66 | + return hSession->model_num; | ||
67 | +} | ||
68 | + | ||
69 | +const char * lib3270_get_model(H3270 *hSession) | ||
70 | +{ | ||
71 | + CHECK_SESSION_HANDLE(hSession); | ||
72 | + return hSession->model_name; | ||
73 | +} | ||
74 | + | ||
75 | + /** | ||
76 | + * @brief Parse the model number. | ||
77 | + * | ||
78 | + * @param session Session Handle. | ||
79 | + * @param m Model number. | ||
80 | + * | ||
81 | + * @return -1 (error), 0 (default), or the specified number. | ||
82 | + */ | ||
83 | +static int parse_model_number(H3270 *session, const char *m) | ||
84 | +{ | ||
85 | + int sl; | ||
86 | + int n; | ||
87 | + | ||
88 | + if(!m) | ||
89 | + return 0; | ||
90 | + | ||
91 | + sl = strlen(m); | ||
92 | + | ||
93 | + /* An empty model number is no good. */ | ||
94 | + if (!sl) | ||
95 | + return 0; | ||
96 | + | ||
97 | + if (sl > 1) { | ||
98 | + /* | ||
99 | + * If it's longer than one character, it needs to start with | ||
100 | + * '327[89]', and it sets the m3279 resource. | ||
101 | + */ | ||
102 | + if (!strncmp(m, "3278", 4)) | ||
103 | + { | ||
104 | + session->m3279 = 0; | ||
105 | + } | ||
106 | + else if (!strncmp(m, "3279", 4)) | ||
107 | + { | ||
108 | + session->m3279 = 1; | ||
109 | + } | ||
110 | + else | ||
111 | + { | ||
112 | + return -1; | ||
113 | + } | ||
114 | + m += 4; | ||
115 | + sl -= 4; | ||
116 | + | ||
117 | + /* Check more syntax. -E is allowed, but ignored. */ | ||
118 | + switch (m[0]) { | ||
119 | + case '\0': | ||
120 | + /* Use default model number. */ | ||
121 | + return 0; | ||
122 | + case '-': | ||
123 | + /* Model number specified. */ | ||
124 | + m++; | ||
125 | + sl--; | ||
126 | + break; | ||
127 | + default: | ||
128 | + return -1; | ||
129 | + } | ||
130 | + switch (sl) { | ||
131 | + case 1: /* n */ | ||
132 | + break; | ||
133 | + case 3: /* n-E */ | ||
134 | + if (strcasecmp(m + 1, "-E")) { | ||
135 | + return -1; | ||
136 | + } | ||
137 | + break; | ||
138 | + default: | ||
139 | + return -1; | ||
140 | + } | ||
141 | + } | ||
142 | + | ||
143 | + /* Check the numeric model number. */ | ||
144 | + n = atoi(m); | ||
145 | + if (n >= 2 && n <= 5) { | ||
146 | + return n; | ||
147 | + } else { | ||
148 | + return -1; | ||
149 | + } | ||
150 | + | ||
151 | +} | ||
152 | + | ||
153 | +int lib3270_set_model(H3270 *hSession, const char *model) | ||
154 | +{ | ||
155 | + int ovc, ovr; | ||
156 | + char junk; | ||
157 | + int model_number; | ||
158 | + | ||
159 | + if(hSession->cstate != LIB3270_NOT_CONNECTED) | ||
160 | + return errno = EISCONN; | ||
161 | + | ||
162 | + strncpy(hSession->full_model_name,"IBM-",LIB3270_FULL_MODEL_NAME_LENGTH); | ||
163 | + hSession->model_name = &hSession->full_model_name[4]; | ||
164 | + | ||
165 | + if(!*model) | ||
166 | + model = "2"; // No model, use the default one | ||
167 | + | ||
168 | + model_number = parse_model_number(hSession,model); | ||
169 | + if (model_number < 0) | ||
170 | + { | ||
171 | + popup_an_error(hSession,"Invalid model number: %s", model); | ||
172 | + model_number = 0; | ||
173 | + } | ||
174 | + | ||
175 | + if (!model_number) | ||
176 | + { | ||
177 | +#if defined(RESTRICT_3279) | ||
178 | + model_number = 3; | ||
179 | +#else | ||
180 | + model_number = 4; | ||
181 | +#endif | ||
182 | + } | ||
183 | + | ||
184 | + if(hSession->mono) | ||
185 | + hSession->m3279 = 0; | ||
186 | + else | ||
187 | + hSession->m3279 = 1; | ||
188 | + | ||
189 | + if(!hSession->extended) | ||
190 | + { | ||
191 | + if(hSession->oversize.str) | ||
192 | + lib3270_free(hSession->oversize.str); | ||
193 | + hSession->oversize.str = CN; | ||
194 | + } | ||
195 | + | ||
196 | +#if defined(RESTRICT_3279) | ||
197 | + if (hSession->m3279 && model_number == 4) | ||
198 | + model_number = 3; | ||
199 | +#endif | ||
200 | + | ||
201 | + trace("Model_number: %d",model_number); | ||
202 | + | ||
203 | + if (!hSession->extended || hSession->oversize.str == CN || sscanf(hSession->oversize.str, "%dx%d%c", &ovc, &ovr, &junk) != 2) | ||
204 | + { | ||
205 | + ovc = 0; | ||
206 | + ovr = 0; | ||
207 | + } | ||
208 | + ctlr_set_rows_cols(hSession, model_number, ovc, ovr); | ||
209 | + | ||
210 | + if (hSession->termname != CN) | ||
211 | + hSession->termtype = hSession->termname; | ||
212 | + else | ||
213 | + hSession->termtype = hSession->full_model_name; | ||
214 | + | ||
215 | + trace("Termtype: %s",hSession->termtype); | ||
216 | + | ||
217 | + ctlr_reinit(hSession,MODEL_CHANGE); | ||
218 | + screen_update(hSession,0,hSession->view.rows*hSession->view.cols); | ||
219 | + | ||
220 | + return 0; | ||
221 | +} | ||
222 | + |
src/core/paste.c
@@ -193,8 +193,8 @@ static int set_string(H3270 *hSession, const unsigned char *str, int length) | @@ -193,8 +193,8 @@ static int set_string(H3270 *hSession, const unsigned char *str, int length) | ||
193 | int faddr; | 193 | int faddr; |
194 | unsigned char fa; | 194 | unsigned char fa; |
195 | 195 | ||
196 | - baddr = (hSession->cursor_addr + hSession->cols) % (hSession->cols * hSession->rows); /* down */ | ||
197 | - baddr = (baddr / hSession->cols) * hSession->cols; /* 1st col */ | 196 | + baddr = (hSession->cursor_addr + hSession->view.cols) % (hSession->view.cols * hSession->view.rows); /* down */ |
197 | + baddr = (baddr / hSession->view.cols) * hSession->view.cols; /* 1st col */ | ||
198 | faddr = lib3270_field_addr(hSession,baddr); | 198 | faddr = lib3270_field_addr(hSession,baddr); |
199 | fa = hSession->ea_buf[faddr].fa; | 199 | fa = hSession->ea_buf[faddr].fa; |
200 | if (faddr != baddr && !FA_IS_PROTECTED(fa)) | 200 | if (faddr != baddr && !FA_IS_PROTECTED(fa)) |
@@ -248,12 +248,12 @@ LIB3270_EXPORT int lib3270_set_string_at(H3270 *hSession, unsigned int row, unsi | @@ -248,12 +248,12 @@ LIB3270_EXPORT int lib3270_set_string_at(H3270 *hSession, unsigned int row, unsi | ||
248 | row--; | 248 | row--; |
249 | col--; | 249 | col--; |
250 | 250 | ||
251 | - if(row > hSession->rows || col > hSession->cols) | 251 | + if(row > hSession->view.rows || col > hSession->view.cols) |
252 | return - (errno = EOVERFLOW); | 252 | return - (errno = EOVERFLOW); |
253 | 253 | ||
254 | hSession->cbk.suspend(hSession); | 254 | hSession->cbk.suspend(hSession); |
255 | 255 | ||
256 | - hSession->cursor_addr = (row * hSession->cols) + col; | 256 | + hSession->cursor_addr = (row * hSession->view.cols) + col; |
257 | rc = set_string(hSession, str, length); | 257 | rc = set_string(hSession, str, length); |
258 | hSession->cbk.resume(hSession); | 258 | hSession->cbk.resume(hSession); |
259 | 259 |
src/core/properties/string.c
@@ -132,6 +132,13 @@ | @@ -132,6 +132,13 @@ | ||
132 | NULL // Set value. | 132 | NULL // Set value. |
133 | }, | 133 | }, |
134 | 134 | ||
135 | + { | ||
136 | + "oversize", // Property name. | ||
137 | + N_( "Screen oversize if larger than the chosen model"), // Property description. | ||
138 | + lib3270_get_oversize, // Get value. | ||
139 | + lib3270_set_oversize // Set value. | ||
140 | + }, | ||
141 | + | ||
135 | /* | 142 | /* |
136 | { | 143 | { |
137 | "", // Property name. | 144 | "", // Property name. |
src/core/screen.c
@@ -99,9 +99,9 @@ LIB3270_EXPORT LIB3270_ATTR lib3270_get_attribute_at_address(H3270 *hSession, un | @@ -99,9 +99,9 @@ LIB3270_EXPORT LIB3270_ATTR lib3270_get_attribute_at_address(H3270 *hSession, un | ||
99 | if(check_online_session(hSession)) | 99 | if(check_online_session(hSession)) |
100 | return (LIB3270_ATTR) -1; | 100 | return (LIB3270_ATTR) -1; |
101 | 101 | ||
102 | - if(!hSession->text ||baddr > (hSession->rows*hSession->cols)) | 102 | + if(!hSession->text ||baddr > (hSession->view.rows*hSession->view.cols)) |
103 | { | 103 | { |
104 | - errno = EINVAL; | 104 | + errno = EOVERFLOW; |
105 | return (LIB3270_ATTR) -1; | 105 | return (LIB3270_ATTR) -1; |
106 | } | 106 | } |
107 | 107 | ||
@@ -112,9 +112,9 @@ LIB3270_EXPORT int lib3270_is_selected(H3270 *hSession, unsigned int baddr) | @@ -112,9 +112,9 @@ LIB3270_EXPORT int lib3270_is_selected(H3270 *hSession, unsigned int baddr) | ||
112 | { | 112 | { |
113 | FAIL_IF_NOT_ONLINE(hSession); | 113 | FAIL_IF_NOT_ONLINE(hSession); |
114 | 114 | ||
115 | - if(!hSession->text || baddr > (hSession->rows*hSession->cols)) | 115 | + if(!hSession->text || baddr > (hSession->view.rows * hSession->view.cols)) |
116 | { | 116 | { |
117 | - errno = EINVAL; | 117 | + errno = EOVERFLOW; |
118 | return -1; | 118 | return -1; |
119 | } | 119 | } |
120 | 120 | ||
@@ -125,9 +125,9 @@ LIB3270_EXPORT int lib3270_get_element(H3270 *hSession, unsigned int baddr, unsi | @@ -125,9 +125,9 @@ LIB3270_EXPORT int lib3270_get_element(H3270 *hSession, unsigned int baddr, unsi | ||
125 | { | 125 | { |
126 | FAIL_IF_NOT_ONLINE(hSession); | 126 | FAIL_IF_NOT_ONLINE(hSession); |
127 | 127 | ||
128 | - if(!hSession->text || baddr > (hSession->rows*hSession->cols)) | 128 | + if(!hSession->text || baddr > (hSession->view.rows * hSession->view.cols)) |
129 | { | 129 | { |
130 | - errno = EINVAL; | 130 | + errno = EOVERFLOW; |
131 | return -1; | 131 | return -1; |
132 | } | 132 | } |
133 | 133 | ||
@@ -248,14 +248,14 @@ static unsigned short calc_attrs(H3270 *session, int baddr, int fa_addr, int fa) | @@ -248,14 +248,14 @@ static unsigned short calc_attrs(H3270 *session, int baddr, int fa_addr, int fa) | ||
248 | LIB3270_EXPORT unsigned int lib3270_get_length(H3270 *h) | 248 | LIB3270_EXPORT unsigned int lib3270_get_length(H3270 *h) |
249 | { | 249 | { |
250 | CHECK_SESSION_HANDLE(h); | 250 | CHECK_SESSION_HANDLE(h); |
251 | - return h->rows * h->cols; | 251 | + return h->view.rows * h->view.cols; |
252 | } | 252 | } |
253 | 253 | ||
254 | LIB3270_EXPORT void lib3270_get_screen_size(H3270 *h, unsigned int *r, unsigned int *c) | 254 | LIB3270_EXPORT void lib3270_get_screen_size(H3270 *h, unsigned int *r, unsigned int *c) |
255 | { | 255 | { |
256 | CHECK_SESSION_HANDLE(h); | 256 | CHECK_SESSION_HANDLE(h); |
257 | - *r = h->rows; | ||
258 | - *c = h->cols; | 257 | + *r = h->view.rows; |
258 | + *c = h->view.cols; | ||
259 | 259 | ||
260 | // trace("%s: %d - %d",__FUNCTION__, h->rows, h->cols); | 260 | // trace("%s: %d - %d",__FUNCTION__, h->rows, h->cols); |
261 | 261 | ||
@@ -264,22 +264,22 @@ LIB3270_EXPORT void lib3270_get_screen_size(H3270 *h, unsigned int *r, unsigned | @@ -264,22 +264,22 @@ LIB3270_EXPORT void lib3270_get_screen_size(H3270 *h, unsigned int *r, unsigned | ||
264 | LIB3270_EXPORT unsigned int lib3270_get_width(H3270 *h) | 264 | LIB3270_EXPORT unsigned int lib3270_get_width(H3270 *h) |
265 | { | 265 | { |
266 | CHECK_SESSION_HANDLE(h); | 266 | CHECK_SESSION_HANDLE(h); |
267 | - return h->cols; | 267 | + return h->view.cols; |
268 | } | 268 | } |
269 | 269 | ||
270 | LIB3270_EXPORT unsigned int lib3270_get_height(H3270 *h) | 270 | LIB3270_EXPORT unsigned int lib3270_get_height(H3270 *h) |
271 | { | 271 | { |
272 | CHECK_SESSION_HANDLE(h); | 272 | CHECK_SESSION_HANDLE(h); |
273 | - return h->rows; | 273 | + return h->view.rows; |
274 | } | 274 | } |
275 | 275 | ||
276 | void update_model_info(H3270 *session, unsigned int model, unsigned int cols, unsigned int rows) | 276 | void update_model_info(H3270 *session, unsigned int model, unsigned int cols, unsigned int rows) |
277 | { | 277 | { |
278 | - if(model == session->model_num && session->maxROWS == rows && session->maxCOLS == cols) | 278 | + if(model == session->model_num && session->max.rows == rows && session->max.cols == cols) |
279 | return; | 279 | return; |
280 | 280 | ||
281 | - session->maxCOLS = cols; | ||
282 | - session->maxROWS = rows; | 281 | + session->max.cols = cols; |
282 | + session->max.rows = rows; | ||
283 | session->model_num = model; | 283 | session->model_num = model; |
284 | 284 | ||
285 | /* Update the model name. */ | 285 | /* Update the model name. */ |
@@ -296,7 +296,7 @@ LIB3270_EXPORT int lib3270_get_contents(H3270 *h, int first, int last, unsigned | @@ -296,7 +296,7 @@ LIB3270_EXPORT int lib3270_get_contents(H3270 *h, int first, int last, unsigned | ||
296 | 296 | ||
297 | CHECK_SESSION_HANDLE(h); | 297 | CHECK_SESSION_HANDLE(h); |
298 | 298 | ||
299 | - len = h->rows * h->cols; | 299 | + len = h->view.rows * h->view.cols; |
300 | 300 | ||
301 | if(first > len || last > len || first < 0 || last < 0) | 301 | if(first > len || last > len || first < 0 || last < 0) |
302 | return EFAULT; | 302 | return EFAULT; |
@@ -377,7 +377,7 @@ void screen_update(H3270 *session, int bstart, int bend) | @@ -377,7 +377,7 @@ void screen_update(H3270 *session, int bstart, int bend) | ||
377 | 377 | ||
378 | for(f=first;f<last;f++) | 378 | for(f=first;f<last;f++) |
379 | { | 379 | { |
380 | - if(f%session->cols == 0) | 380 | + if(f%session->view.cols == 0) |
381 | len++; | 381 | len++; |
382 | } | 382 | } |
383 | 383 | ||
@@ -430,10 +430,10 @@ LIB3270_EXPORT int lib3270_translate_to_address(H3270 *hSession, unsigned int ro | @@ -430,10 +430,10 @@ LIB3270_EXPORT int lib3270_translate_to_address(H3270 *hSession, unsigned int ro | ||
430 | row--; | 430 | row--; |
431 | col--; | 431 | col--; |
432 | 432 | ||
433 | - if(row > hSession->rows || col > hSession->cols) | 433 | + if(row > hSession->view.rows || col > hSession->view.cols) |
434 | return - (errno = EOVERFLOW); | 434 | return - (errno = EOVERFLOW); |
435 | 435 | ||
436 | - return (row * hSession->cols) + col; | 436 | + return (row * hSession->view.cols) + col; |
437 | } | 437 | } |
438 | 438 | ||
439 | 439 | ||
@@ -443,7 +443,7 @@ LIB3270_EXPORT int lib3270_set_cursor_address(H3270 *hSession, unsigned int badd | @@ -443,7 +443,7 @@ LIB3270_EXPORT int lib3270_set_cursor_address(H3270 *hSession, unsigned int badd | ||
443 | 443 | ||
444 | trace("%s(%d)",__FUNCTION__,baddr); | 444 | trace("%s(%d)",__FUNCTION__,baddr); |
445 | 445 | ||
446 | - if(baddr > (hSession->rows * hSession->cols)) | 446 | + if(baddr > (hSession->view.rows * hSession->view.cols)) |
447 | return - (errno = EOVERFLOW); | 447 | return - (errno = EOVERFLOW); |
448 | 448 | ||
449 | if(hSession->selected && !lib3270_get_toggle(hSession,LIB3270_TOGGLE_KEEP_SELECTED)) | 449 | if(hSession->selected && !lib3270_get_toggle(hSession,LIB3270_TOGGLE_KEEP_SELECTED)) |
@@ -481,8 +481,8 @@ int cursor_move(H3270 *hSession, int baddr) | @@ -481,8 +481,8 @@ int cursor_move(H3270 *hSession, int baddr) | ||
481 | hSession->cursor_addr = baddr; | 481 | hSession->cursor_addr = baddr; |
482 | hSession->cbk.update_cursor( | 482 | hSession->cbk.update_cursor( |
483 | hSession, | 483 | hSession, |
484 | - (unsigned short) (baddr/hSession->cols), | ||
485 | - (unsigned short) (baddr%hSession->cols), | 484 | + (unsigned short) (baddr/hSession->view.cols), |
485 | + (unsigned short) (baddr%hSession->view.cols), | ||
486 | hSession->text[baddr].chr, | 486 | hSession->text[baddr].chr, |
487 | hSession->text[baddr].attr | 487 | hSession->text[baddr].attr |
488 | ); | 488 | ); |
@@ -652,16 +652,16 @@ void set_viewsize(H3270 *session, unsigned int rows, unsigned int cols) | @@ -652,16 +652,16 @@ void set_viewsize(H3270 *session, unsigned int rows, unsigned int cols) | ||
652 | { | 652 | { |
653 | CHECK_SESSION_HANDLE(session); | 653 | CHECK_SESSION_HANDLE(session); |
654 | 654 | ||
655 | - if(rows == session->rows && session->cols == cols) | 655 | + if(rows == session->view.rows && session->view.cols == cols) |
656 | return; | 656 | return; |
657 | 657 | ||
658 | - session->rows = rows; | ||
659 | - session->cols = cols; | 658 | + session->view.rows = rows; |
659 | + session->view.cols = cols; | ||
660 | 660 | ||
661 | trace("View size changes to %dx%d",rows,cols); | 661 | trace("View size changes to %dx%d",rows,cols); |
662 | 662 | ||
663 | if(session->cbk.configure) | 663 | if(session->cbk.configure) |
664 | - session->cbk.configure(session,session->rows,session->cols); | 664 | + session->cbk.configure(session,session->view.rows,session->view.cols); |
665 | 665 | ||
666 | } | 666 | } |
667 | 667 | ||
@@ -896,7 +896,7 @@ LIB3270_EXPORT int lib3270_testpattern(H3270 *hSession) | @@ -896,7 +896,7 @@ LIB3270_EXPORT int lib3270_testpattern(H3270 *hSession) | ||
896 | 896 | ||
897 | FAIL_IF_ONLINE(hSession); | 897 | FAIL_IF_ONLINE(hSession); |
898 | 898 | ||
899 | - max = (hSession->maxROWS * hSession->maxCOLS); | 899 | + max = (hSession->max.rows * hSession->max.cols); |
900 | for(f=0;f<max;f++) | 900 | for(f=0;f<max;f++) |
901 | { | 901 | { |
902 | if(!pat[row].cc[pos]) | 902 | if(!pat[row].cc[pos]) |
src/core/session.c
@@ -273,7 +273,7 @@ static void set_timer(H3270 GNUC_UNUSED(*session), unsigned char GNUC_UNUSED(on) | @@ -273,7 +273,7 @@ static void set_timer(H3270 GNUC_UNUSED(*session), unsigned char GNUC_UNUSED(on) | ||
273 | static void screen_disp(H3270 *session) | 273 | static void screen_disp(H3270 *session) |
274 | { | 274 | { |
275 | CHECK_SESSION_HANDLE(session); | 275 | CHECK_SESSION_HANDLE(session); |
276 | - screen_update(session,0,session->rows*session->cols); | 276 | + screen_update(session,0,session->view.rows*session->view.cols); |
277 | } | 277 | } |
278 | 278 | ||
279 | static void nop_int(H3270 GNUC_UNUSED(*session), int GNUC_UNUSED(width)) | 279 | static void nop_int(H3270 GNUC_UNUSED(*session), int GNUC_UNUSED(width)) |
src/core/sf.c
@@ -552,14 +552,14 @@ static enum pds sf_create_partition(H3270 *hSession, unsigned char buf[], int bu | @@ -552,14 +552,14 @@ static enum pds sf_create_partition(H3270 *hSession, unsigned char buf[], int bu | ||
552 | GET16(h, &buf[6]); | 552 | GET16(h, &buf[6]); |
553 | trace_ds(hSession,",h=%d", h); | 553 | trace_ds(hSession,",h=%d", h); |
554 | } else | 554 | } else |
555 | - h = hSession->maxROWS; | 555 | + h = hSession->max.rows; |
556 | 556 | ||
557 | if (buflen > 9) | 557 | if (buflen > 9) |
558 | { | 558 | { |
559 | GET16(w, &buf[8]); | 559 | GET16(w, &buf[8]); |
560 | trace_ds(hSession,",w=%d", w); | 560 | trace_ds(hSession,",w=%d", w); |
561 | } else | 561 | } else |
562 | - w = hSession->maxCOLS; | 562 | + w = hSession->max.cols; |
563 | 563 | ||
564 | if (buflen > 11) | 564 | if (buflen > 11) |
565 | { | 565 | { |
@@ -579,14 +579,14 @@ static enum pds sf_create_partition(H3270 *hSession, unsigned char buf[], int bu | @@ -579,14 +579,14 @@ static enum pds sf_create_partition(H3270 *hSession, unsigned char buf[], int bu | ||
579 | GET16(hv, &buf[14]); | 579 | GET16(hv, &buf[14]); |
580 | trace_ds(hSession,",hv=%d", hv); | 580 | trace_ds(hSession,",hv=%d", hv); |
581 | } else | 581 | } else |
582 | - hv = (h > hSession->maxROWS)? hSession->maxROWS: h; | 582 | + hv = (h > hSession->max.rows)? hSession->max.rows: h; |
583 | 583 | ||
584 | if (buflen > 17) | 584 | if (buflen > 17) |
585 | { | 585 | { |
586 | GET16(wv, &buf[16]); | 586 | GET16(wv, &buf[16]); |
587 | trace_ds(hSession,",wv=%d", wv); | 587 | trace_ds(hSession,",wv=%d", wv); |
588 | } else | 588 | } else |
589 | - wv = (w > hSession->maxCOLS)? hSession->maxCOLS: w; | 589 | + wv = (w > hSession->max.cols)? hSession->max.cols: w; |
590 | 590 | ||
591 | if (buflen > 19) | 591 | if (buflen > 19) |
592 | { | 592 | { |
@@ -787,8 +787,8 @@ static void do_qr_usable_area(H3270 *hSession) | @@ -787,8 +787,8 @@ static void do_qr_usable_area(H3270 *hSession) | ||
787 | space3270out(hSession,19); | 787 | space3270out(hSession,19); |
788 | *hSession->obptr++ = 0x01; /* 12/14-bit addressing */ | 788 | *hSession->obptr++ = 0x01; /* 12/14-bit addressing */ |
789 | *hSession->obptr++ = 0x00; /* no special character features */ | 789 | *hSession->obptr++ = 0x00; /* no special character features */ |
790 | - SET16(hSession->obptr, hSession->maxCOLS); /* usable width */ | ||
791 | - SET16(hSession->obptr, hSession->maxROWS); /* usable height */ | 790 | + SET16(hSession->obptr, hSession->max.cols); /* usable width */ |
791 | + SET16(hSession->obptr, hSession->max.rows); /* usable height */ | ||
792 | *hSession->obptr++ = 0x01; /* units (mm) */ | 792 | *hSession->obptr++ = 0x01; /* units (mm) */ |
793 | num = display_widthMM(); | 793 | num = display_widthMM(); |
794 | denom = display_width(); | 794 | denom = display_width(); |
@@ -810,7 +810,7 @@ static void do_qr_usable_area(H3270 *hSession) | @@ -810,7 +810,7 @@ static void do_qr_usable_area(H3270 *hSession) | ||
810 | SET16(hSession->obptr, (int)denom); /* Yr denominator */ | 810 | SET16(hSession->obptr, (int)denom); /* Yr denominator */ |
811 | *hSession->obptr++ = *char_width; /* AW */ | 811 | *hSession->obptr++ = *char_width; /* AW */ |
812 | *hSession->obptr++ = *char_height; /* AH */ | 812 | *hSession->obptr++ = *char_height; /* AH */ |
813 | - SET16(hSession->obptr, hSession->maxCOLS * hSession->maxROWS); /* buffer, questionable */ | 813 | + SET16(hSession->obptr, hSession->max.cols * hSession->max.cols); /* buffer, questionable */ |
814 | } | 814 | } |
815 | 815 | ||
816 | static void do_qr_color(H3270 *hSession) | 816 | static void do_qr_color(H3270 *hSession) |
@@ -897,7 +897,7 @@ static void do_qr_alpha_part(H3270 *hSession) | @@ -897,7 +897,7 @@ static void do_qr_alpha_part(H3270 *hSession) | ||
897 | trace_ds(hSession,"> QueryReply(AlphanumericPartitions)\n"); | 897 | trace_ds(hSession,"> QueryReply(AlphanumericPartitions)\n"); |
898 | space3270out(hSession,4); | 898 | space3270out(hSession,4); |
899 | *hSession->obptr++ = 0; /* 1 partition */ | 899 | *hSession->obptr++ = 0; /* 1 partition */ |
900 | - SET16(hSession->obptr, hSession->maxROWS * hSession->maxCOLS); /* buffer space */ | 900 | + SET16(hSession->obptr, hSession->max.cols * hSession->max.rows); /* buffer space */ |
901 | *hSession->obptr++ = 0; /* no special features */ | 901 | *hSession->obptr++ = 0; /* no special features */ |
902 | } | 902 | } |
903 | 903 | ||
@@ -1009,8 +1009,8 @@ static void do_qr_imp_part(H3270 *hSession) | @@ -1009,8 +1009,8 @@ static void do_qr_imp_part(H3270 *hSession) | ||
1009 | *hSession->obptr++ = 0x00; /* reserved */ | 1009 | *hSession->obptr++ = 0x00; /* reserved */ |
1010 | SET16(hSession->obptr, 80); /* implicit partition width */ | 1010 | SET16(hSession->obptr, 80); /* implicit partition width */ |
1011 | SET16(hSession->obptr, 24); /* implicit partition height */ | 1011 | SET16(hSession->obptr, 24); /* implicit partition height */ |
1012 | - SET16(hSession->obptr, hSession->maxCOLS); /* alternate height */ | ||
1013 | - SET16(hSession->obptr, hSession->maxROWS); /* alternate width */ | 1012 | + SET16(hSession->obptr, hSession->max.cols); /* alternate height */ |
1013 | + SET16(hSession->obptr, hSession->max.rows); /* alternate width */ | ||
1014 | } | 1014 | } |
1015 | 1015 | ||
1016 | static void query_reply_end(H3270 *hSession) | 1016 | static void query_reply_end(H3270 *hSession) |
src/core/telnet.c
@@ -246,9 +246,8 @@ static const char *trsp_flag[2] = { "POSITIVE-RESPONSE", "NEGATIVE-RESPONSE" }; | @@ -246,9 +246,8 @@ static const char *trsp_flag[2] = { "POSITIVE-RESPONSE", "NEGATIVE-RESPONSE" }; | ||
246 | #endif /*]*/ | 246 | #endif /*]*/ |
247 | #endif /*]*/ | 247 | #endif /*]*/ |
248 | 248 | ||
249 | -#define XMIT_ROWS hSession->maxROWS | ||
250 | -#define XMIT_COLS hSession->maxCOLS | ||
251 | - | 249 | +#define XMIT_ROWS hSession->max.rows |
250 | +#define XMIT_COLS hSession->max.cols | ||
252 | 251 | ||
253 | #if defined(_WIN32) /*[*/ | 252 | #if defined(_WIN32) /*[*/ |
254 | #define socket_errno() WSAGetLastError() | 253 | #define socket_errno() WSAGetLastError() |
src/core/toggles.c
@@ -338,7 +338,7 @@ LIB3270_EXPORT int lib3270_toggle(H3270 *session, LIB3270_TOGGLE ix) | @@ -338,7 +338,7 @@ LIB3270_EXPORT int lib3270_toggle(H3270 *session, LIB3270_TOGGLE ix) | ||
338 | static void toggle_altscreen(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE GNUC_UNUSED(tt)) | 338 | static void toggle_altscreen(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE GNUC_UNUSED(tt)) |
339 | { | 339 | { |
340 | if(!session->screen_alt) | 340 | if(!session->screen_alt) |
341 | - set_viewsize(session,t->value ? 24 : session->maxROWS,80); | 341 | + set_viewsize(session,t->value ? 24 : session->max.rows,80); |
342 | } | 342 | } |
343 | 343 | ||
344 | static void toggle_redraw(H3270 *session, struct lib3270_toggle GNUC_UNUSED(*t), LIB3270_TOGGLE_TYPE GNUC_UNUSED(tt)) | 344 | static void toggle_redraw(H3270 *session, struct lib3270_toggle GNUC_UNUSED(*t), LIB3270_TOGGLE_TYPE GNUC_UNUSED(tt)) |
src/core/trace_ds.c
@@ -77,7 +77,7 @@ static void wtrace(H3270 *session, const char *fmt, ...); | @@ -77,7 +77,7 @@ static void wtrace(H3270 *session, const char *fmt, ...); | ||
77 | const char * rcba(H3270 *hSession, int baddr) | 77 | const char * rcba(H3270 *hSession, int baddr) |
78 | { | 78 | { |
79 | static char buf[48]; | 79 | static char buf[48]; |
80 | - (void) snprintf(buf, 48, "(%d,%d)", baddr/hSession->cols + 1, baddr%hSession->cols + 1); | 80 | + (void) snprintf(buf, 48, "(%d,%d)", baddr/hSession->view.cols + 1, baddr%hSession->view.cols + 1); |
81 | return buf; | 81 | return buf; |
82 | } | 82 | } |
83 | 83 | ||
@@ -262,12 +262,12 @@ void trace_screen(H3270 *session) | @@ -262,12 +262,12 @@ void trace_screen(H3270 *session) | ||
262 | { | 262 | { |
263 | unsigned int row, baddr; | 263 | unsigned int row, baddr; |
264 | 264 | ||
265 | - for(row=baddr=0;row < session->rows;row++) | 265 | + for(row=baddr=0;row < session->view.rows;row++) |
266 | { | 266 | { |
267 | unsigned int col; | 267 | unsigned int col; |
268 | wtrace(session,"%02d ",row+1); | 268 | wtrace(session,"%02d ",row+1); |
269 | 269 | ||
270 | - for(col = 0; col < session->cols;col++) | 270 | + for(col = 0; col < session->view.cols;col++) |
271 | { | 271 | { |
272 | if(session->text[baddr].attr & LIB3270_ATTR_CG) | 272 | if(session->text[baddr].attr & LIB3270_ATTR_CG) |
273 | wtrace(session,"%c",'.'); | 273 | wtrace(session,"%c",'.'); |
@@ -305,7 +305,7 @@ void trace_ansi_disc(H3270 *hSession) | @@ -305,7 +305,7 @@ void trace_ansi_disc(H3270 *hSession) | ||
305 | unsigned int i; | 305 | unsigned int i; |
306 | 306 | ||
307 | wtrace(hSession,"%c",'\n'); | 307 | wtrace(hSession,"%c",'\n'); |
308 | - for (i = 0; i < hSession->cols; i++) | 308 | + for (i = 0; i < hSession->view.cols; i++) |
309 | wtrace(hSession,"%c",'='); | 309 | wtrace(hSession,"%c",'='); |
310 | wtrace(hSession,"%c",'\n'); | 310 | wtrace(hSession,"%c",'\n'); |
311 | 311 |
src/include/3270ds.h
@@ -141,11 +141,11 @@ | @@ -141,11 +141,11 @@ | ||
141 | #define QR_IMP_PART 0xa6 /* implicit partition */ | 141 | #define QR_IMP_PART 0xa6 /* implicit partition */ |
142 | #define QR_NULL 0xff /* null */ | 142 | #define QR_NULL 0xff /* null */ |
143 | 143 | ||
144 | -#define BA_TO_ROW(ba) ((ba) / hSession->cols) | ||
145 | -#define BA_TO_COL(ba) ((ba) % hSession->cols) | ||
146 | -#define ROWCOL_TO_BA(r,c) (((r) * hSession->cols) + c) | ||
147 | -#define INC_BA(ba) { (ba) = ((ba) + 1) % (hSession->cols * hSession->rows); } | ||
148 | -#define DEC_BA(ba) { (ba) = (ba) ? (ba - 1) : (((int) (hSession->cols*hSession->rows)) - 1); } | 144 | +#define BA_TO_ROW(ba) ((ba) / hSession->view.cols) |
145 | +#define BA_TO_COL(ba) ((ba) % hSession->view.cols) | ||
146 | +#define ROWCOL_TO_BA(r,c) (((r) * hSession->view.cols) + c) | ||
147 | +#define INC_BA(ba) { (ba) = ((ba) + 1) % (hSession->view.cols * hSession->view.rows); } | ||
148 | +#define DEC_BA(ba) { (ba) = (ba) ? (ba - 1) : (((int) (hSession->view.cols*hSession->view.rows)) - 1); } | ||
149 | 149 | ||
150 | /** Field attributes. */ | 150 | /** Field attributes. */ |
151 | #define FA_PRINTABLE 0xc0 ///< @brief these make the character "printable" */ | 151 | #define FA_PRINTABLE 0xc0 ///< @brief these make the character "printable" */ |
src/include/lib3270-internals.h
@@ -362,7 +362,7 @@ struct _h3270 | @@ -362,7 +362,7 @@ struct _h3270 | ||
362 | int modified_sel : 1; | 362 | int modified_sel : 1; |
363 | int mono : 1; ///< @brief Forces monochrome display | 363 | int mono : 1; ///< @brief Forces monochrome display |
364 | int m3279 : 1; | 364 | int m3279 : 1; |
365 | - int extended : 1; | 365 | + int extended : 1; ///< @brief Extended data stream. |
366 | int typeahead : 1; | 366 | int typeahead : 1; |
367 | int numeric_lock : 1; | 367 | int numeric_lock : 1; |
368 | int oerr_lock : 1; ///< @brief If true, operator errors will lock the keyboard. | 368 | int oerr_lock : 1; ///< @brief If true, operator errors will lock the keyboard. |
@@ -385,8 +385,6 @@ struct _h3270 | @@ -385,8 +385,6 @@ struct _h3270 | ||
385 | int formatted : 1; /**< @brief Formatted screen flag */ | 385 | int formatted : 1; /**< @brief Formatted screen flag */ |
386 | int starting : 1; /**< @brief Is starting (no first screen)? */ | 386 | int starting : 1; /**< @brief Is starting (no first screen)? */ |
387 | 387 | ||
388 | - char * oversize; | ||
389 | - | ||
390 | struct lib3270_toggle | 388 | struct lib3270_toggle |
391 | { | 389 | { |
392 | char value; /**< toggle value */ | 390 | char value; /**< toggle value */ |
@@ -428,12 +426,28 @@ struct _h3270 | @@ -428,12 +426,28 @@ struct _h3270 | ||
428 | H3270FT * ft; /**< @brief Active file transfer data */ | 426 | H3270FT * ft; /**< @brief Active file transfer data */ |
429 | 427 | ||
430 | // screen info | 428 | // screen info |
431 | - unsigned int ov_rows; | ||
432 | - unsigned int ov_cols; | ||
433 | - unsigned int maxROWS; | ||
434 | - unsigned int maxCOLS; | ||
435 | - unsigned int rows; | ||
436 | - unsigned int cols; | 429 | + |
430 | + // Oversize. | ||
431 | + struct | ||
432 | + { | ||
433 | + char * str; | ||
434 | + unsigned int rows; | ||
435 | + unsigned int cols; | ||
436 | + } oversize; | ||
437 | + | ||
438 | + // Maximum screen size. | ||
439 | + struct | ||
440 | + { | ||
441 | + unsigned int rows; | ||
442 | + unsigned int cols; | ||
443 | + } max; | ||
444 | + | ||
445 | + // View size | ||
446 | + struct { | ||
447 | + unsigned int rows; | ||
448 | + unsigned int cols; | ||
449 | + } view; | ||
450 | + | ||
437 | LIB3270_POINTER pointer; /**< @brief Current pointer. */ | 451 | LIB3270_POINTER pointer; /**< @brief Current pointer. */ |
438 | int cursor_addr; | 452 | int cursor_addr; |
439 | int buffer_addr; | 453 | int buffer_addr; |
src/include/lib3270.h
@@ -1196,7 +1196,7 @@ | @@ -1196,7 +1196,7 @@ | ||
1196 | * @param col Desired col. | 1196 | * @param col Desired col. |
1197 | * | 1197 | * |
1198 | */ | 1198 | */ |
1199 | - LIB3270_EXPORT int lib3270_get_is_protected_at(H3270 *h, int row, int col); | 1199 | + LIB3270_EXPORT int lib3270_get_is_protected_at(H3270 *h, unsigned int row, unsigned int col); |
1200 | 1200 | ||
1201 | /** | 1201 | /** |
1202 | * @brief Get address of the first blank. | 1202 | * @brief Get address of the first blank. |
src/include/lib3270/properties.h
@@ -128,6 +128,7 @@ | @@ -128,6 +128,7 @@ | ||
128 | /** | 128 | /** |
129 | * @brief Set lib3270 integer property by name. | 129 | * @brief Set lib3270 integer property by name. |
130 | * | 130 | * |
131 | + * @param hSession Session handle. | ||
131 | * @param name Nome of the property. | 132 | * @param name Nome of the property. |
132 | * @param value New property value. | 133 | * @param value New property value. |
133 | * @param seconds Time (in seconds) whe should wait for "ready" state (0 = none). | 134 | * @param seconds Time (in seconds) whe should wait for "ready" state (0 = none). |
@@ -137,6 +138,31 @@ | @@ -137,6 +138,31 @@ | ||
137 | */ | 138 | */ |
138 | LIB3270_EXPORT int lib3270_set_string_property(H3270 * hSession, const char *name, const char * value, int seconds); | 139 | LIB3270_EXPORT int lib3270_set_string_property(H3270 * hSession, const char *name, const char * value, int seconds); |
139 | 140 | ||
141 | + | ||
142 | + /** | ||
143 | + * @brief Get Oversize. | ||
144 | + * | ||
145 | + * @param hSession Session handle. | ||
146 | + * | ||
147 | + * @return Oversize definition (NULL if not set). | ||
148 | + * | ||
149 | + */ | ||
150 | + LIB3270_EXPORT const char * lib3270_get_oversize(H3270 *hSession); | ||
151 | + | ||
152 | + /** | ||
153 | + * @brief Set oversize. | ||
154 | + * | ||
155 | + * @param hSession Session handle. | ||
156 | + * @param value Oversize value. | ||
157 | + * | ||
158 | + * @return 0 if success, error code if not (sets errno) | ||
159 | + * | ||
160 | + * @retval EISCONN Already connected to host. | ||
161 | + * @retval ENOTSUP Oversize is not supported. | ||
162 | + * | ||
163 | + */ | ||
164 | + LIB3270_EXPORT int lib3270_set_oversize(H3270 *hSession, const char *value); | ||
165 | + | ||
140 | #ifdef __cplusplus | 166 | #ifdef __cplusplus |
141 | } | 167 | } |
142 | #endif | 168 | #endif |
src/selection/actions.c
@@ -51,7 +51,7 @@ LIB3270_EXPORT int lib3270_unselect(H3270 *hSession) | @@ -51,7 +51,7 @@ LIB3270_EXPORT int lib3270_unselect(H3270 *hSession) | ||
51 | { | 51 | { |
52 | hSession->selected = 0; | 52 | hSession->selected = 0; |
53 | 53 | ||
54 | - for(a = 0; a < ((int) (hSession->rows*hSession->cols)); a++) | 54 | + for(a = 0; a < ((int) (hSession->view.rows * hSession->view.cols)); a++) |
55 | { | 55 | { |
56 | if(hSession->text[a].attr & LIB3270_ATTR_SELECTED) | 56 | if(hSession->text[a].attr & LIB3270_ATTR_SELECTED) |
57 | { | 57 | { |
@@ -94,7 +94,7 @@ LIB3270_EXPORT int lib3270_select_region(H3270 *h, int start, int end) | @@ -94,7 +94,7 @@ LIB3270_EXPORT int lib3270_select_region(H3270 *h, int start, int end) | ||
94 | if(!lib3270_connected(h)) | 94 | if(!lib3270_connected(h)) |
95 | return ENOTCONN; | 95 | return ENOTCONN; |
96 | 96 | ||
97 | - maxlen = (h->rows * h->cols); | 97 | + maxlen = (h->view.rows * h->view.cols); |
98 | 98 | ||
99 | // Check bounds | 99 | // Check bounds |
100 | if(start < 0 || start > maxlen || end < 0 || end > maxlen || start > end) | 100 | if(start < 0 || start > maxlen || end < 0 || end > maxlen || start > end) |
@@ -143,7 +143,7 @@ LIB3270_EXPORT int lib3270_select_all(H3270 * hSession) | @@ -143,7 +143,7 @@ LIB3270_EXPORT int lib3270_select_all(H3270 * hSession) | ||
143 | { | 143 | { |
144 | FAIL_IF_NOT_ONLINE(hSession); | 144 | FAIL_IF_NOT_ONLINE(hSession); |
145 | 145 | ||
146 | - do_select(hSession,0,(hSession->rows*hSession->cols)-1,0); | 146 | + do_select(hSession,0,(hSession->view.rows * hSession->view.cols)-1,0); |
147 | 147 | ||
148 | return 0; | 148 | return 0; |
149 | } | 149 | } |
@@ -200,28 +200,28 @@ LIB3270_EXPORT int lib3270_move_selected_area(H3270 *hSession, int from, int to) | @@ -200,28 +200,28 @@ LIB3270_EXPORT int lib3270_move_selected_area(H3270 *hSession, int from, int to) | ||
200 | if(!lib3270_get_selection_bounds(hSession,&pos[0],&pos[1])) | 200 | if(!lib3270_get_selection_bounds(hSession,&pos[0],&pos[1])) |
201 | return from; | 201 | return from; |
202 | 202 | ||
203 | - rows = (to / hSession->cols) - (from / hSession->cols); | ||
204 | - cols = (to % hSession->cols) - (from % hSession->cols); | 203 | + rows = (to / hSession->view.cols) - (from / hSession->view.cols); |
204 | + cols = (to % hSession->view.cols) - (from % hSession->view.cols); | ||
205 | 205 | ||
206 | for(f=0;f<2;f++) | 206 | for(f=0;f<2;f++) |
207 | { | 207 | { |
208 | - int row = (pos[f] / hSession->cols) + rows; | ||
209 | - int col = (pos[f] % hSession->cols) + cols; | 208 | + int row = (pos[f] / hSession->view.cols) + rows; |
209 | + int col = (pos[f] % hSession->view.cols) + cols; | ||
210 | 210 | ||
211 | if(row < 0) | 211 | if(row < 0) |
212 | - rows = - (pos[f] / hSession->cols); | 212 | + rows = - (pos[f] / hSession->view.cols); |
213 | 213 | ||
214 | if(col < 0) | 214 | if(col < 0) |
215 | - cols = - (pos[f] % hSession->cols); | 215 | + cols = - (pos[f] % hSession->view.cols); |
216 | 216 | ||
217 | - if(row >= ((int) hSession->rows)) | ||
218 | - rows = hSession->rows - ((pos[f] / hSession->cols)+1); | 217 | + if(row >= ((int) hSession->view.rows)) |
218 | + rows = hSession->view.rows - ((pos[f] / hSession->view.cols)+1); | ||
219 | 219 | ||
220 | - if(col >= ((int) hSession->cols)) | ||
221 | - cols = hSession->cols - ((pos[f] % hSession->cols)+1); | 220 | + if(col >= ((int) hSession->view.cols)) |
221 | + cols = hSession->view.cols - ((pos[f] % hSession->view.cols)+1); | ||
222 | } | 222 | } |
223 | 223 | ||
224 | - step = (rows * hSession->cols) + cols; | 224 | + step = (rows * hSession->view.cols) + cols; |
225 | 225 | ||
226 | do_select(hSession,hSession->select.start + step,hSession->select.end + step,hSession->rectsel); | 226 | do_select(hSession,hSession->select.start + step,hSession->select.end + step,hSession->rectsel); |
227 | cursor_move(hSession,hSession->select.end); | 227 | cursor_move(hSession,hSession->select.end); |
@@ -251,20 +251,20 @@ LIB3270_EXPORT int lib3270_drag_selection(H3270 *h, unsigned char flag, int orig | @@ -251,20 +251,20 @@ LIB3270_EXPORT int lib3270_drag_selection(H3270 *h, unsigned char flag, int orig | ||
251 | else if((flag&0x8F) == SELECTION_ACTIVE) | 251 | else if((flag&0x8F) == SELECTION_ACTIVE) |
252 | return lib3270_move_selected_area(h,origin,baddr); | 252 | return lib3270_move_selected_area(h,origin,baddr); |
253 | 253 | ||
254 | - row = baddr/h->cols; | ||
255 | - col = baddr%h->cols; | 254 | + row = baddr/h->view.cols; |
255 | + col = baddr%h->view.cols; | ||
256 | 256 | ||
257 | if(flag & SELECTION_LEFT) // Update left margin | 257 | if(flag & SELECTION_LEFT) // Update left margin |
258 | - origin = first = ((first/h->cols)*h->cols) + col; | 258 | + origin = first = ((first/h->view.cols)*h->view.cols) + col; |
259 | 259 | ||
260 | if(flag & SELECTION_TOP) // Update top margin | 260 | if(flag & SELECTION_TOP) // Update top margin |
261 | - origin = first = (row*h->cols) + (first%h->cols); | 261 | + origin = first = (row*h->view.cols) + (first%h->view.cols); |
262 | 262 | ||
263 | if(flag & SELECTION_RIGHT) // Update right margin | 263 | if(flag & SELECTION_RIGHT) // Update right margin |
264 | - origin = last = ((last/h->cols)*h->cols) + col; | 264 | + origin = last = ((last/h->view.cols)*h->view.cols) + col; |
265 | 265 | ||
266 | if(flag & SELECTION_BOTTOM) // Update bottom margin | 266 | if(flag & SELECTION_BOTTOM) // Update bottom margin |
267 | - origin = last = (row*h->cols) + (last%h->cols); | 267 | + origin = last = (row*h->view.cols) + (last%h->view.cols); |
268 | 268 | ||
269 | trace("origin=%d first=%d last=%d",origin,first,last); | 269 | trace("origin=%d first=%d last=%d",origin,first,last); |
270 | 270 | ||
@@ -291,28 +291,28 @@ LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir | @@ -291,28 +291,28 @@ LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir | ||
291 | switch(dir) | 291 | switch(dir) |
292 | { | 292 | { |
293 | case LIB3270_DIR_UP: | 293 | case LIB3270_DIR_UP: |
294 | - if(start <= ((int) hSession->cols)) | 294 | + if(start <= ((int) hSession->view.cols)) |
295 | return EINVAL; | 295 | return EINVAL; |
296 | - start -= hSession->cols; | ||
297 | - end -= hSession->cols; | 296 | + start -= hSession->view.cols; |
297 | + end -= hSession->view.cols; | ||
298 | break; | 298 | break; |
299 | 299 | ||
300 | case LIB3270_DIR_DOWN: | 300 | case LIB3270_DIR_DOWN: |
301 | - if(end >= ((int) (hSession->cols * (hSession->rows-1)))) | 301 | + if(end >= ((int) (hSession->view.cols * (hSession->view.rows-1)))) |
302 | return EINVAL; | 302 | return EINVAL; |
303 | - start += hSession->cols; | ||
304 | - end += hSession->cols; | 303 | + start += hSession->view.cols; |
304 | + end += hSession->view.cols; | ||
305 | break; | 305 | break; |
306 | 306 | ||
307 | case LIB3270_DIR_LEFT: | 307 | case LIB3270_DIR_LEFT: |
308 | - if( (start % hSession->cols) < 1) | 308 | + if( (start % hSession->view.cols) < 1) |
309 | return EINVAL; | 309 | return EINVAL; |
310 | start--; | 310 | start--; |
311 | end--; | 311 | end--; |
312 | break; | 312 | break; |
313 | 313 | ||
314 | case LIB3270_DIR_RIGHT: | 314 | case LIB3270_DIR_RIGHT: |
315 | - if( (end % hSession->cols) >= (hSession->cols-1)) | 315 | + if( (end % hSession->view.cols) >= (hSession->view.cols-1)) |
316 | return EINVAL; | 316 | return EINVAL; |
317 | start++; | 317 | start++; |
318 | end++; | 318 | end++; |
src/selection/get.c
@@ -53,7 +53,7 @@ LIB3270_EXPORT char * lib3270_get_selected_text(H3270 *hSession, char tok, LIB32 | @@ -53,7 +53,7 @@ LIB3270_EXPORT char * lib3270_get_selected_text(H3270 *hSession, char tok, LIB32 | ||
53 | { | 53 | { |
54 | int row, col, baddr; | 54 | int row, col, baddr; |
55 | char * ret; | 55 | char * ret; |
56 | - size_t buflen = (hSession->rows * (hSession->cols+1))+1; | 56 | + size_t buflen = (hSession->view.rows * (hSession->view.cols+1))+1; |
57 | size_t sz = 0; | 57 | size_t sz = 0; |
58 | unsigned short attr = 0xFFFF; | 58 | unsigned short attr = 0xFFFF; |
59 | char cut = (options & LIB3270_SELECTION_CUT) != 0; | 59 | char cut = (options & LIB3270_SELECTION_CUT) != 0; |
@@ -73,11 +73,11 @@ LIB3270_EXPORT char * lib3270_get_selected_text(H3270 *hSession, char tok, LIB32 | @@ -73,11 +73,11 @@ LIB3270_EXPORT char * lib3270_get_selected_text(H3270 *hSession, char tok, LIB32 | ||
73 | baddr = 0; | 73 | baddr = 0; |
74 | unsigned char fa = 0; | 74 | unsigned char fa = 0; |
75 | 75 | ||
76 | - for(row=0;row < ((int) hSession->rows);row++) | 76 | + for(row=0;row < ((int) hSession->view.rows);row++) |
77 | { | 77 | { |
78 | int cr = 0; | 78 | int cr = 0; |
79 | 79 | ||
80 | - for(col = 0; col < ((int) hSession->cols);col++) | 80 | + for(col = 0; col < ((int) hSession->view.cols);col++) |
81 | { | 81 | { |
82 | if(hSession->ea_buf[baddr].fa) { | 82 | if(hSession->ea_buf[baddr].fa) { |
83 | fa = hSession->ea_buf[baddr].fa; | 83 | fa = hSession->ea_buf[baddr].fa; |
src/selection/selection.c
@@ -65,10 +65,10 @@ static void update_selected_rectangle(H3270 *session) | @@ -65,10 +65,10 @@ static void update_selected_rectangle(H3270 *session) | ||
65 | get_selected_addr(session,&begin,&end); | 65 | get_selected_addr(session,&begin,&end); |
66 | 66 | ||
67 | // Get start & end posision | 67 | // Get start & end posision |
68 | - p[0].row = (begin/session->cols); | ||
69 | - p[0].col = (begin%session->cols); | ||
70 | - p[1].row = (end/session->cols); | ||
71 | - p[1].col = (end%session->cols); | 68 | + p[0].row = (begin/session->view.cols); |
69 | + p[0].col = (begin%session->view.cols); | ||
70 | + p[1].row = (end/session->view.cols); | ||
71 | + p[1].col = (end%session->view.cols); | ||
72 | 72 | ||
73 | if(p[0].row > p[1].row) | 73 | if(p[0].row > p[1].row) |
74 | { | 74 | { |
@@ -86,9 +86,9 @@ static void update_selected_rectangle(H3270 *session) | @@ -86,9 +86,9 @@ static void update_selected_rectangle(H3270 *session) | ||
86 | 86 | ||
87 | // First remove unselected areas | 87 | // First remove unselected areas |
88 | baddr = 0; | 88 | baddr = 0; |
89 | - for(row=0;row < ((int) session->rows);row++) | 89 | + for(row=0;row < ((int) session->view.rows);row++) |
90 | { | 90 | { |
91 | - for(col = 0; col < ((int) session->cols);col++) | 91 | + for(col = 0; col < ((int) session->view.cols);col++) |
92 | { | 92 | { |
93 | if(!(row >= p[0].row && row <= p[1].row && col >= p[0].col && col <= p[1].col) && (session->text[baddr].attr & LIB3270_ATTR_SELECTED)) | 93 | if(!(row >= p[0].row && row <= p[1].row && col >= p[0].col && col <= p[1].col) && (session->text[baddr].attr & LIB3270_ATTR_SELECTED)) |
94 | { | 94 | { |
@@ -101,9 +101,9 @@ static void update_selected_rectangle(H3270 *session) | @@ -101,9 +101,9 @@ static void update_selected_rectangle(H3270 *session) | ||
101 | 101 | ||
102 | // Then, draw selected ones | 102 | // Then, draw selected ones |
103 | baddr = 0; | 103 | baddr = 0; |
104 | - for(row=0;row < ((int) session->rows);row++) | 104 | + for(row=0;row < ((int) session->view.rows);row++) |
105 | { | 105 | { |
106 | - for(col = 0; col < ((int) session->cols);col++) | 106 | + for(col = 0; col < ((int) session->view.cols);col++) |
107 | { | 107 | { |
108 | if((row >= p[0].row && row <= p[1].row && col >= p[0].col && col <= p[1].col) && !(session->text[baddr].attr & LIB3270_ATTR_SELECTED)) | 108 | if((row >= p[0].row && row <= p[1].row && col >= p[0].col && col <= p[1].col) && !(session->text[baddr].attr & LIB3270_ATTR_SELECTED)) |
109 | { | 109 | { |
@@ -119,7 +119,7 @@ static void update_selected_rectangle(H3270 *session) | @@ -119,7 +119,7 @@ static void update_selected_rectangle(H3270 *session) | ||
119 | static void update_selected_region(H3270 *session) | 119 | static void update_selected_region(H3270 *session) |
120 | { | 120 | { |
121 | int baddr,begin,end; | 121 | int baddr,begin,end; |
122 | - int len = session->rows*session->cols; | 122 | + int len = session->view.rows * session->view.cols; |
123 | 123 | ||
124 | get_selected_addr(session,&begin,&end); | 124 | get_selected_addr(session,&begin,&end); |
125 | 125 | ||
@@ -167,7 +167,7 @@ void toggle_rectselect(H3270 *session, struct lib3270_toggle GNUC_UNUSED(*t), LI | @@ -167,7 +167,7 @@ void toggle_rectselect(H3270 *session, struct lib3270_toggle GNUC_UNUSED(*t), LI | ||
167 | 167 | ||
168 | void do_select(H3270 *h, unsigned int start, unsigned int end, unsigned int rect) | 168 | void do_select(H3270 *h, unsigned int start, unsigned int end, unsigned int rect) |
169 | { | 169 | { |
170 | - if(end > (h->rows * h->cols)) | 170 | + if(end > (h->view.rows * h->view.cols)) |
171 | return; | 171 | return; |
172 | 172 | ||
173 | // Do we really need to change selection? | 173 | // Do we really need to change selection? |
@@ -209,11 +209,11 @@ LIB3270_EXPORT unsigned char lib3270_get_selection_flags(H3270 *hSession, int ba | @@ -209,11 +209,11 @@ LIB3270_EXPORT unsigned char lib3270_get_selection_flags(H3270 *hSession, int ba | ||
209 | if(!(lib3270_connected(hSession) && (hSession->text[baddr].attr & LIB3270_ATTR_SELECTED))) | 209 | if(!(lib3270_connected(hSession) && (hSession->text[baddr].attr & LIB3270_ATTR_SELECTED))) |
210 | return rc; | 210 | return rc; |
211 | 211 | ||
212 | - row = baddr / hSession->cols; | ||
213 | - col = baddr % hSession->cols; | 212 | + row = baddr / hSession->view.cols; |
213 | + col = baddr % hSession->view.cols; | ||
214 | rc |= SELECTION_ACTIVE; | 214 | rc |= SELECTION_ACTIVE; |
215 | 215 | ||
216 | - if( (hSession->select.start % hSession->cols) == (hSession->select.end % hSession->cols) ) | 216 | + if( (hSession->select.start % hSession->view.cols) == (hSession->select.end % hSession->view.cols) ) |
217 | { | 217 | { |
218 | rc |= SELECTION_SINGLE_COL; | 218 | rc |= SELECTION_SINGLE_COL; |
219 | } | 219 | } |
@@ -224,20 +224,20 @@ LIB3270_EXPORT unsigned char lib3270_get_selection_flags(H3270 *hSession, int ba | @@ -224,20 +224,20 @@ LIB3270_EXPORT unsigned char lib3270_get_selection_flags(H3270 *hSession, int ba | ||
224 | 224 | ||
225 | /// FIXME: It should test if baddr is the last element before the +1. | 225 | /// FIXME: It should test if baddr is the last element before the +1. |
226 | 226 | ||
227 | - if( (col == ((int) hSession->cols)) || !(hSession->text[baddr+1].attr & LIB3270_ATTR_SELECTED) ) | 227 | + if( (col == ((int) hSession->view.cols)) || !(hSession->text[baddr+1].attr & LIB3270_ATTR_SELECTED) ) |
228 | rc |= SELECTION_RIGHT; | 228 | rc |= SELECTION_RIGHT; |
229 | } | 229 | } |
230 | 230 | ||
231 | - if( (hSession->select.start / hSession->cols) == (hSession->select.end / hSession->cols) ) | 231 | + if( (hSession->select.start / hSession->view.cols) == (hSession->select.end / hSession->view.cols) ) |
232 | { | 232 | { |
233 | rc |= SELECTION_SINGLE_ROW; | 233 | rc |= SELECTION_SINGLE_ROW; |
234 | } | 234 | } |
235 | else | 235 | else |
236 | { | 236 | { |
237 | - if( (row == 0) || !(hSession->text[baddr-hSession->cols].attr & LIB3270_ATTR_SELECTED) ) | 237 | + if( (row == 0) || !(hSession->text[baddr-hSession->view.cols].attr & LIB3270_ATTR_SELECTED) ) |
238 | rc |= SELECTION_TOP; | 238 | rc |= SELECTION_TOP; |
239 | 239 | ||
240 | - if( (row == ((int) hSession->rows)) || !(hSession->text[baddr+hSession->cols].attr & LIB3270_ATTR_SELECTED) ) | 240 | + if( (row == ((int) hSession->view.rows)) || !(hSession->text[baddr+hSession->view.cols].attr & LIB3270_ATTR_SELECTED) ) |
241 | rc |= SELECTION_BOTTOM; | 241 | rc |= SELECTION_BOTTOM; |
242 | } | 242 | } |
243 | 243 | ||
@@ -254,7 +254,7 @@ LIB3270_EXPORT char * lib3270_get_region(H3270 *h, int start_pos, int end_pos, u | @@ -254,7 +254,7 @@ LIB3270_EXPORT char * lib3270_get_region(H3270 *h, int start_pos, int end_pos, u | ||
254 | if(check_online_session(h)) | 254 | if(check_online_session(h)) |
255 | return NULL; | 255 | return NULL; |
256 | 256 | ||
257 | - maxlen = h->rows * (h->cols+1); | 257 | + maxlen = h->view.rows * (h->view.cols+1); |
258 | 258 | ||
259 | if(start_pos < 0 || start_pos > maxlen || end_pos < 0 || end_pos > maxlen || end_pos < start_pos) | 259 | if(start_pos < 0 || start_pos > maxlen || end_pos < 0 || end_pos > maxlen || end_pos < start_pos) |
260 | return NULL; | 260 | return NULL; |
@@ -266,7 +266,7 @@ LIB3270_EXPORT char * lib3270_get_region(H3270 *h, int start_pos, int end_pos, u | @@ -266,7 +266,7 @@ LIB3270_EXPORT char * lib3270_get_region(H3270 *h, int start_pos, int end_pos, u | ||
266 | if(all || h->text[baddr].attr & LIB3270_ATTR_SELECTED) | 266 | if(all || h->text[baddr].attr & LIB3270_ATTR_SELECTED) |
267 | text[sz++] = (h->text[baddr].attr & LIB3270_ATTR_CG) ? ' ' : h->text[baddr].chr; | 267 | text[sz++] = (h->text[baddr].attr & LIB3270_ATTR_CG) ? ' ' : h->text[baddr].chr; |
268 | 268 | ||
269 | - if((baddr%h->cols) == 0 && sz > 0) | 269 | + if((baddr%h->view.cols) == 0 && sz > 0) |
270 | text[sz++] = '\n'; | 270 | text[sz++] = '\n'; |
271 | } | 271 | } |
272 | text[sz++] = 0; | 272 | text[sz++] = 0; |
@@ -291,7 +291,7 @@ LIB3270_EXPORT char * lib3270_get_string_at_address(H3270 *h, int offset, int le | @@ -291,7 +291,7 @@ LIB3270_EXPORT char * lib3270_get_string_at_address(H3270 *h, int offset, int le | ||
291 | if(offset < 0) | 291 | if(offset < 0) |
292 | offset = lib3270_get_cursor_address(h); | 292 | offset = lib3270_get_cursor_address(h); |
293 | 293 | ||
294 | - maxlen = (h->rows * (h->cols+ (lf ? 1 : 0) )) - offset; | 294 | + maxlen = (h->view.rows * (h->view.cols+ (lf ? 1 : 0) )) - offset; |
295 | if(maxlen <= 0 || offset < 0) | 295 | if(maxlen <= 0 || offset < 0) |
296 | { | 296 | { |
297 | errno = EOVERFLOW; | 297 | errno = EOVERFLOW; |
@@ -321,7 +321,7 @@ LIB3270_EXPORT char * lib3270_get_string_at_address(H3270 *h, int offset, int le | @@ -321,7 +321,7 @@ LIB3270_EXPORT char * lib3270_get_string_at_address(H3270 *h, int offset, int le | ||
321 | offset++; | 321 | offset++; |
322 | len--; | 322 | len--; |
323 | 323 | ||
324 | - if(lf && (offset%h->cols) == 0 && len > 0) | 324 | + if(lf && (offset%h->view.cols) == 0 && len > 0) |
325 | { | 325 | { |
326 | *(ptr++) = lf; | 326 | *(ptr++) = lf; |
327 | len--; | 327 | len--; |
@@ -408,16 +408,16 @@ LIB3270_EXPORT int lib3270_get_selection_rectangle(H3270 *hSession, unsigned int | @@ -408,16 +408,16 @@ LIB3270_EXPORT int lib3270_get_selection_rectangle(H3270 *hSession, unsigned int | ||
408 | if(!hSession->selected || hSession->select.start == hSession->select.end) | 408 | if(!hSession->selected || hSession->select.start == hSession->select.end) |
409 | return errno = ENOENT; | 409 | return errno = ENOENT; |
410 | 410 | ||
411 | - minRow = hSession->rows; | ||
412 | - minCol = hSession->cols; | 411 | + minRow = hSession->view.rows; |
412 | + minCol = hSession->view.cols; | ||
413 | maxRow = 0; | 413 | maxRow = 0; |
414 | maxCol = 0; | 414 | maxCol = 0; |
415 | baddr = 0; | 415 | baddr = 0; |
416 | count = 0; | 416 | count = 0; |
417 | 417 | ||
418 | - for(r=0;r < hSession->rows;r++) | 418 | + for(r=0;r < hSession->view.rows;r++) |
419 | { | 419 | { |
420 | - for(c = 0; c < hSession->cols;c++) | 420 | + for(c = 0; c < hSession->view.cols;c++) |
421 | { | 421 | { |
422 | if(hSession->text[baddr].attr & LIB3270_ATTR_SELECTED) | 422 | if(hSession->text[baddr].attr & LIB3270_ATTR_SELECTED) |
423 | { | 423 | { |