Commit 76b280cec0fb36c834b422c4403ac34c7f874d3f

Authored by perry.werneck@gmail.com
1 parent ea9215dc

Movendo campos para a estrutura de sessao

src/include/lib3270/session.h
@@ -165,6 +165,18 @@ @@ -165,6 +165,18 @@
165 char ssl_host; 165 char ssl_host;
166 char ever_3270; 166 char ever_3270;
167 167
  168 + // ctlr.c
  169 + int sscp_start;
  170 + unsigned char default_fg;
  171 + unsigned char default_bg;
  172 + unsigned char default_gr;
  173 + unsigned char default_cs;
  174 + unsigned char default_ic;
  175 + char reply_mode;
  176 + int trace_primed : 1;
  177 + int crm_nattr;
  178 + unsigned char crm_attr[16];
  179 +
168 // Telnet.c 180 // Telnet.c
169 unsigned char * ibuf; 181 unsigned char * ibuf;
170 int ibuf_size; /**< size of ibuf */ 182 int ibuf_size; /**< size of ibuf */
src/lib3270/ctlr.c
@@ -82,25 +82,27 @@ @@ -82,25 +82,27 @@
82 // /* ea_buf[-1] is the dummy default field attribute */ 82 // /* ea_buf[-1] is the dummy default field attribute */
83 83
84 // Boolean formatted = False; /* set in screen_disp */ 84 // Boolean formatted = False; /* set in screen_disp */
85 -unsigned char reply_mode = SF_SRM_FIELD;  
86 -int crm_nattr = 0;  
87 -unsigned char crm_attr[16]; 85 +// unsigned char reply_mode = SF_SRM_FIELD;
  86 +// int crm_nattr = 0;
  87 +// unsigned char crm_attr[16];
88 Boolean dbcs = False; 88 Boolean dbcs = False;
89 89
90 /* Statics */ 90 /* Statics */
91 // static struct ea *aea_buf; /* alternate 3270 extended attribute buffer */ 91 // static struct ea *aea_buf; /* alternate 3270 extended attribute buffer */
92 static unsigned char *zero_buf; // empty buffer, for area clears 92 static unsigned char *zero_buf; // empty buffer, for area clears
93 static void set_formatted(H3270 *session); 93 static void set_formatted(H3270 *session);
94 -static void ctlr_blanks(void);  
95 -static Boolean trace_primed = False;  
96 -static unsigned char default_fg;  
97 -static unsigned char default_bg;  
98 -static unsigned char default_gr;  
99 -static unsigned char default_cs;  
100 -static unsigned char default_ic; 94 +static void ctlr_blanks(H3270 *session);
  95 +// static Boolean trace_primed = False;
  96 +
  97 +//static unsigned char default_fg;
  98 +//static unsigned char default_bg;
  99 +//static unsigned char default_gr;
  100 +//static unsigned char default_cs;
  101 +//static unsigned char default_ic;
  102 +
101 static void ctlr_half_connect(H3270 *session, int ignored, void *dunno); 103 static void ctlr_half_connect(H3270 *session, int ignored, void *dunno);
102 static void ctlr_connect(H3270 *session, int ignored, void *dunno); 104 static void ctlr_connect(H3270 *session, int ignored, void *dunno);
103 -static int sscp_start; 105 +// static int sscp_start;
104 static void ticking_stop(H3270 *session); 106 static void ticking_stop(H3270 *session);
105 static void ctlr_add_ic(int baddr, unsigned char ic); 107 static void ctlr_add_ic(int baddr, unsigned char ic);
106 static void changed(H3270 *session, int bstart, int bend); 108 static void changed(H3270 *session, int bstart, int bend);
@@ -313,13 +315,13 @@ static void ctlr_connect(H3270 *session, int ignored unused, void *dunno) @@ -313,13 +315,13 @@ static void ctlr_connect(H3270 *session, int ignored unused, void *dunno)
313 status_reset(session); 315 status_reset(session);
314 } 316 }
315 317
316 - default_fg = 0x00;  
317 - default_bg = 0x00;  
318 - default_gr = 0x00;  
319 - default_cs = 0x00;  
320 - default_ic = 0x00;  
321 - reply_mode = SF_SRM_FIELD;  
322 - crm_nattr = 0; 318 + session->default_fg = 0x00;
  319 + session->default_bg = 0x00;
  320 + session->default_gr = 0x00;
  321 + session->default_cs = 0x00;
  322 + session->default_ic = 0x00;
  323 + session->reply_mode = SF_SRM_FIELD;
  324 + session->crm_nattr = 0;
323 } 325 }
324 326
325 327
@@ -477,7 +479,7 @@ void ctlr_erase(H3270 *session, int alt) @@ -477,7 +479,7 @@ void ctlr_erase(H3270 *session, int alt)
477 { 479 {
478 if(session->vcontrol) 480 if(session->vcontrol)
479 { 481 {
480 - ctlr_blanks(); 482 + ctlr_blanks(session);
481 session->display(session); 483 session->display(session);
482 } 484 }
483 set_viewsize(session,24,80); 485 set_viewsize(session,24,80);
@@ -608,14 +610,14 @@ static void @@ -608,14 +610,14 @@ static void
608 insert_sa(int baddr, unsigned char *current_fgp, unsigned char *current_bgp, 610 insert_sa(int baddr, unsigned char *current_fgp, unsigned char *current_bgp,
609 unsigned char *current_grp, unsigned char *current_csp, Boolean *anyp) 611 unsigned char *current_grp, unsigned char *current_csp, Boolean *anyp)
610 { 612 {
611 - if (reply_mode != SF_SRM_CHAR) 613 + if (h3270.reply_mode != SF_SRM_CHAR)
612 return; 614 return;
613 615
614 - if (memchr((char *)crm_attr, XA_FOREGROUND, crm_nattr)) 616 + if (memchr((char *) h3270.crm_attr, XA_FOREGROUND, h3270.crm_nattr))
615 insert_sa1(XA_FOREGROUND, h3270.ea_buf[baddr].fg, current_fgp, anyp); 617 insert_sa1(XA_FOREGROUND, h3270.ea_buf[baddr].fg, current_fgp, anyp);
616 - if (memchr((char *)crm_attr, XA_BACKGROUND, crm_nattr)) 618 + if (memchr((char *) h3270.crm_attr, XA_BACKGROUND, h3270.crm_nattr))
617 insert_sa1(XA_BACKGROUND, h3270.ea_buf[baddr].bg, current_bgp, anyp); 619 insert_sa1(XA_BACKGROUND, h3270.ea_buf[baddr].bg, current_bgp, anyp);
618 - if (memchr((char *)crm_attr, XA_HIGHLIGHTING, crm_nattr)) { 620 + if (memchr((char *) h3270.crm_attr, XA_HIGHLIGHTING, h3270.crm_nattr)) {
619 unsigned char gr; 621 unsigned char gr;
620 622
621 gr = h3270.ea_buf[baddr].gr; 623 gr = h3270.ea_buf[baddr].gr;
@@ -623,7 +625,7 @@ insert_sa(int baddr, unsigned char *current_fgp, unsigned char *current_bgp, @@ -623,7 +625,7 @@ insert_sa(int baddr, unsigned char *current_fgp, unsigned char *current_bgp,
623 gr |= 0xf0; 625 gr |= 0xf0;
624 insert_sa1(XA_HIGHLIGHTING, gr, current_grp, anyp); 626 insert_sa1(XA_HIGHLIGHTING, gr, current_grp, anyp);
625 } 627 }
626 - if (memchr((char *)crm_attr, XA_CHARSET, crm_nattr)) { 628 + if (memchr((char *) h3270.crm_attr, XA_CHARSET, h3270.crm_nattr)) {
627 insert_sa1(XA_CHARSET, host_cs(h3270.ea_buf[baddr].cs), current_csp,anyp); 629 insert_sa1(XA_CHARSET, host_cs(h3270.ea_buf[baddr].cs), current_csp,anyp);
628 } 630 }
629 } 631 }
@@ -759,7 +761,7 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all) @@ -759,7 +761,7 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all)
759 * host left the cursor. 761 * host left the cursor.
760 */ 762 */
761 if (IN_SSCP) 763 if (IN_SSCP)
762 - baddr = sscp_start; 764 + baddr = h3270.sscp_start;
763 765
764 do { 766 do {
765 if (h3270.ea_buf[baddr].cc) { 767 if (h3270.ea_buf[baddr].cc) {
@@ -837,7 +839,7 @@ ctlr_read_buffer(unsigned char aid_byte) @@ -837,7 +839,7 @@ ctlr_read_buffer(unsigned char aid_byte)
837 baddr = 0; 839 baddr = 0;
838 do { 840 do {
839 if (h3270.ea_buf[baddr].fa) { 841 if (h3270.ea_buf[baddr].fa) {
840 - if (reply_mode == SF_SRM_FIELD) { 842 + if (h3270.reply_mode == SF_SRM_FIELD) {
841 space3270out(2); 843 space3270out(2);
842 *obptr++ = ORDER_SF; 844 *obptr++ = ORDER_SF;
843 } else { 845 } else {
@@ -852,9 +854,9 @@ ctlr_read_buffer(unsigned char aid_byte) @@ -852,9 +854,9 @@ ctlr_read_buffer(unsigned char aid_byte)
852 if (any) 854 if (any)
853 trace_ds("'"); 855 trace_ds("'");
854 trace_ds(" StartField%s%s%s", 856 trace_ds(" StartField%s%s%s",
855 - (reply_mode == SF_SRM_FIELD) ? "" : "Extended", 857 + (h3270.reply_mode == SF_SRM_FIELD) ? "" : "Extended",
856 rcba(&h3270,baddr), see_attr(fa)); 858 rcba(&h3270,baddr), see_attr(fa));
857 - if (reply_mode != SF_SRM_FIELD) { 859 + if (h3270.reply_mode != SF_SRM_FIELD) {
858 if (h3270.ea_buf[baddr].fg) { 860 if (h3270.ea_buf[baddr].fg) {
859 space3270out(2); 861 space3270out(2);
860 *obptr++ = XA_FOREGROUND; 862 *obptr++ = XA_FOREGROUND;
@@ -1039,19 +1041,19 @@ ctlr_snap_modes(void) @@ -1039,19 +1041,19 @@ ctlr_snap_modes(void)
1039 { 1041 {
1040 int i; 1042 int i;
1041 1043
1042 - if (!IN_3270 || reply_mode == SF_SRM_FIELD) 1044 + if (!IN_3270 || h3270.reply_mode == SF_SRM_FIELD)
1043 return False; 1045 return False;
1044 1046
1045 - space3270out(6 + crm_nattr); 1047 + space3270out(6 + h3270.crm_nattr);
1046 *obptr++ = CMD_WSF; 1048 *obptr++ = CMD_WSF;
1047 *obptr++ = 0x00; /* implicit length */ 1049 *obptr++ = 0x00; /* implicit length */
1048 *obptr++ = 0x00; 1050 *obptr++ = 0x00;
1049 *obptr++ = SF_SET_REPLY_MODE; 1051 *obptr++ = SF_SET_REPLY_MODE;
1050 *obptr++ = 0x00; /* partition 0 */ 1052 *obptr++ = 0x00; /* partition 0 */
1051 - *obptr++ = reply_mode;  
1052 - if (reply_mode == SF_SRM_CHAR)  
1053 - for (i = 0; i < crm_nattr; i++)  
1054 - *obptr++ = crm_attr[i]; 1053 + *obptr++ = h3270.reply_mode;
  1054 + if (h3270.reply_mode == SF_SRM_CHAR)
  1055 + for (i = 0; i < h3270.crm_nattr; i++)
  1056 + *obptr++ = h3270.crm_attr[i];
1055 return True; 1057 return True;
1056 } 1058 }
1057 #endif /*]*/ 1059 #endif /*]*/
@@ -1167,16 +1169,17 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) @@ -1167,16 +1169,17 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1167 if (buflen < 2) 1169 if (buflen < 2)
1168 return PDS_BAD_CMD; 1170 return PDS_BAD_CMD;
1169 1171
1170 - default_fg = 0;  
1171 - default_bg = 0;  
1172 - default_gr = 0;  
1173 - default_cs = 0;  
1174 - default_ic = 0;  
1175 - trace_primed = True; 1172 + h3270.default_fg = 0;
  1173 + h3270.default_bg = 0;
  1174 + h3270.default_gr = 0;
  1175 + h3270.default_cs = 0;
  1176 + h3270.default_ic = 0;
  1177 +
  1178 + h3270.trace_primed = 1;
1176 h3270.buffer_addr = h3270.cursor_addr; 1179 h3270.buffer_addr = h3270.cursor_addr;
1177 if (WCC_RESET(buf[1])) { 1180 if (WCC_RESET(buf[1])) {
1178 if (erase) 1181 if (erase)
1179 - reply_mode = SF_SRM_FIELD; 1182 + h3270.reply_mode = SF_SRM_FIELD;
1180 trace_ds("%sreset", paren); 1183 trace_ds("%sreset", paren);
1181 paren = ","; 1184 paren = ",";
1182 } 1185 }
@@ -1381,30 +1384,25 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) @@ -1381,30 +1384,25 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1381 } 1384 }
1382 do { 1385 do {
1383 if (add_dbcs) { 1386 if (add_dbcs) {
1384 - ctlr_add(h3270.buffer_addr, add_c1,  
1385 - default_cs); 1387 + ctlr_add(h3270.buffer_addr, add_c1,h3270.default_cs);
1386 } else { 1388 } else {
1387 if (ra_ge) 1389 if (ra_ge)
1388 - ctlr_add(h3270.buffer_addr, add_c1,  
1389 - CS_GE);  
1390 - else if (default_cs)  
1391 - ctlr_add(h3270.buffer_addr, add_c1,  
1392 - default_cs); 1390 + ctlr_add(h3270.buffer_addr, add_c1,CS_GE);
  1391 + else if (h3270.default_cs)
  1392 + ctlr_add(h3270.buffer_addr, add_c1,h3270.default_cs);
1393 else 1393 else
1394 - ctlr_add(h3270.buffer_addr, add_c1,  
1395 - 0); 1394 + ctlr_add(h3270.buffer_addr, add_c1,0);
1396 } 1395 }
1397 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1398 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1399 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1396 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1397 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1398 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1400 INC_BA(h3270.buffer_addr); 1399 INC_BA(h3270.buffer_addr);
1401 if (add_dbcs) { 1400 if (add_dbcs) {
1402 - ctlr_add(h3270.buffer_addr, add_c2,  
1403 - default_cs);  
1404 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1405 - ctlr_add_bg(h3270.buffer_addr, default_bg);  
1406 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1407 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1401 + ctlr_add(h3270.buffer_addr, add_c2,h3270.default_cs);
  1402 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1403 + ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
  1404 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1405 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1408 INC_BA(h3270.buffer_addr); 1406 INC_BA(h3270.buffer_addr);
1409 } 1407 }
1410 } while (h3270.buffer_addr != baddr); 1408 } while (h3270.buffer_addr != baddr);
@@ -1454,10 +1452,10 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) @@ -1454,10 +1452,10 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1454 if (*cp) 1452 if (*cp)
1455 trace_ds("'"); 1453 trace_ds("'");
1456 ctlr_add(h3270.buffer_addr, *cp, CS_GE); 1454 ctlr_add(h3270.buffer_addr, *cp, CS_GE);
1457 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1458 - ctlr_add_bg(h3270.buffer_addr, default_bg);  
1459 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1460 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1455 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1456 + ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
  1457 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1458 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1461 INC_BA(h3270.buffer_addr); 1459 INC_BA(h3270.buffer_addr);
1462 current_fa = get_field_attribute(&h3270,h3270.buffer_addr); 1460 current_fa = get_field_attribute(&h3270,h3270.buffer_addr);
1463 last_cmd = False; 1461 last_cmd = False;
@@ -1608,40 +1606,40 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) @@ -1608,40 +1606,40 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1608 if (*cp == XA_FOREGROUND) { 1606 if (*cp == XA_FOREGROUND) {
1609 trace_ds("%s", see_efa(*cp, *(cp + 1))); 1607 trace_ds("%s", see_efa(*cp, *(cp + 1)));
1610 if (h3270.m3279) 1608 if (h3270.m3279)
1611 - default_fg = *(cp + 1); 1609 + h3270.default_fg = *(cp + 1);
1612 } else if (*cp == XA_BACKGROUND) { 1610 } else if (*cp == XA_BACKGROUND) {
1613 trace_ds("%s", see_efa(*cp, *(cp + 1))); 1611 trace_ds("%s", see_efa(*cp, *(cp + 1)));
1614 if (h3270.m3279) 1612 if (h3270.m3279)
1615 - default_bg = *(cp + 1); 1613 + h3270.default_bg = *(cp + 1);
1616 } else if (*cp == XA_HIGHLIGHTING) { 1614 } else if (*cp == XA_HIGHLIGHTING) {
1617 trace_ds("%s", see_efa(*cp, *(cp + 1))); 1615 trace_ds("%s", see_efa(*cp, *(cp + 1)));
1618 - default_gr = *(cp + 1) & 0x0f; 1616 + h3270.default_gr = *(cp + 1) & 0x0f;
1619 } else if (*cp == XA_ALL) { 1617 } else if (*cp == XA_ALL) {
1620 trace_ds("%s", see_efa(*cp, *(cp + 1))); 1618 trace_ds("%s", see_efa(*cp, *(cp + 1)));
1621 - default_fg = 0;  
1622 - default_bg = 0;  
1623 - default_gr = 0;  
1624 - default_cs = 0;  
1625 - default_ic = 0; 1619 + h3270.default_fg = 0;
  1620 + h3270.default_bg = 0;
  1621 + h3270.default_gr = 0;
  1622 + h3270.default_cs = 0;
  1623 + h3270.default_ic = 0;
1626 } else if (*cp == XA_CHARSET) { 1624 } else if (*cp == XA_CHARSET) {
1627 trace_ds("%s", see_efa(*cp, *(cp + 1))); 1625 trace_ds("%s", see_efa(*cp, *(cp + 1)));
1628 switch (*(cp + 1)) { 1626 switch (*(cp + 1)) {
1629 case 0xf1: 1627 case 0xf1:
1630 - default_cs = CS_APL; 1628 + h3270.default_cs = CS_APL;
1631 break; 1629 break;
1632 case 0xf8: 1630 case 0xf8:
1633 - default_cs = CS_DBCS; 1631 + h3270.default_cs = CS_DBCS;
1634 break; 1632 break;
1635 default: 1633 default:
1636 - default_cs = CS_BASE; 1634 + h3270.default_cs = CS_BASE;
1637 break; 1635 break;
1638 } 1636 }
1639 } else if (*cp == XA_INPUT_CONTROL) { 1637 } else if (*cp == XA_INPUT_CONTROL) {
1640 trace_ds("%s", see_efa(*cp, *(cp + 1))); 1638 trace_ds("%s", see_efa(*cp, *(cp + 1)));
1641 if (*(cp + 1) == 1) 1639 if (*(cp + 1) == 1)
1642 - default_ic = 1; 1640 + h3270.default_ic = 1;
1643 else 1641 else
1644 - default_ic = 0; 1642 + h3270.default_ic = 0;
1645 } else 1643 } else
1646 trace_ds("%s[unsupported]", 1644 trace_ds("%s[unsupported]",
1647 see_efa(*cp, *(cp + 1))); 1645 see_efa(*cp, *(cp + 1)));
@@ -1660,14 +1658,14 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) @@ -1660,14 +1658,14 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1660 END_TEXT(see_ebc(*cp)); 1658 END_TEXT(see_ebc(*cp));
1661 previous = ORDER; 1659 previous = ORDER;
1662 d = ctlr_lookleft_state(buffer_addr, &why); 1660 d = ctlr_lookleft_state(buffer_addr, &why);
1663 - if (default_cs == CS_DBCS || d != DBCS_NONE) { 1661 + if (h3270.default_cs == CS_DBCS || d != DBCS_NONE) {
1664 ABORT_WRITE("invalid format control order in DBCS field"); 1662 ABORT_WRITE("invalid format control order in DBCS field");
1665 } 1663 }
1666 - ctlr_add(h3270.buffer_addr, *cp, default_cs);  
1667 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1668 - ctlr_add_bg(h3270.buffer_addr, default_bg);  
1669 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1670 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1664 + ctlr_add(h3270.buffer_addr, *cp, h3270.default_cs);
  1665 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1666 + ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
  1667 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1668 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1671 INC_BA(h3270.buffer_addr); 1669 INC_BA(h3270.buffer_addr);
1672 last_cmd = True; 1670 last_cmd = True;
1673 last_zpt = False; 1671 last_zpt = False;
@@ -1687,11 +1685,11 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) @@ -1687,11 +1685,11 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1687 } 1685 }
1688 /* All is well. */ 1686 /* All is well. */
1689 previous = ORDER; 1687 previous = ORDER;
1690 - ctlr_add(h3270.buffer_addr, *cp, default_cs);  
1691 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1692 - ctlr_add_bg(h3270.buffer_addr, default_bg);  
1693 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1694 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1688 + ctlr_add(h3270.buffer_addr, *cp, h3270.default_cs);
  1689 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1690 + ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
  1691 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1692 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1695 INC_BA(h3270.buffer_addr); 1693 INC_BA(h3270.buffer_addr);
1696 last_cmd = True; 1694 last_cmd = True;
1697 last_zpt = False; 1695 last_zpt = False;
@@ -1726,11 +1724,11 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) @@ -1726,11 +1724,11 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1726 } 1724 }
1727 /* All is well. */ 1725 /* All is well. */
1728 previous = ORDER; 1726 previous = ORDER;
1729 - ctlr_add(h3270.buffer_addr, *cp, default_cs);  
1730 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1731 - ctlr_add_bg(h3270.buffer_addr, default_bg);  
1732 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1733 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1727 + ctlr_add(h3270.buffer_addr, *cp, h3270.default_cs);
  1728 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1729 + ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
  1730 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1731 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1734 INC_BA(h3270.buffer_addr); 1732 INC_BA(h3270.buffer_addr);
1735 last_cmd = True; 1733 last_cmd = True;
1736 last_zpt = False; 1734 last_zpt = False;
@@ -1742,7 +1740,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) @@ -1742,7 +1740,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1742 if (d == DBCS_RIGHT) { 1740 if (d == DBCS_RIGHT) {
1743 ABORT_WRITE("NULL overwriting right half of DBCS character"); 1741 ABORT_WRITE("NULL overwriting right half of DBCS character");
1744 } 1742 }
1745 - if (d != DBCS_NONE || default_cs == CS_DBCS) { 1743 + if (d != DBCS_NONE || h3270.default_cs == CS_DBCS) {
1746 add_c1 = EBC_null; 1744 add_c1 = EBC_null;
1747 cp++; 1745 cp++;
1748 if (cp >= buf + buflen) { 1746 if (cp >= buf + buflen) {
@@ -1779,18 +1777,18 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) @@ -1779,18 +1777,18 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1779 END_TEXT("NULL"); 1777 END_TEXT("NULL");
1780 add_c1 = *cp; 1778 add_c1 = *cp;
1781 } 1779 }
1782 - ctlr_add(h3270.buffer_addr, add_c1, default_cs);  
1783 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1784 - ctlr_add_bg(h3270.buffer_addr, default_bg);  
1785 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1786 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1780 + ctlr_add(h3270.buffer_addr, add_c1, h3270.default_cs);
  1781 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1782 + ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
  1783 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1784 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1787 INC_BA(h3270.buffer_addr); 1785 INC_BA(h3270.buffer_addr);
1788 if (add_dbcs) { 1786 if (add_dbcs) {
1789 - ctlr_add(h3270.buffer_addr, add_c2, default_cs);  
1790 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1791 - ctlr_add_bg(h3270.buffer_addr, default_bg);  
1792 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1793 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1787 + ctlr_add(h3270.buffer_addr, add_c2, h3270.default_cs);
  1788 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1789 + ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
  1790 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1791 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1794 INC_BA(h3270.buffer_addr); 1792 INC_BA(h3270.buffer_addr);
1795 } 1793 }
1796 last_cmd = False; 1794 last_cmd = False;
@@ -1837,19 +1835,19 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) @@ -1837,19 +1835,19 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1837 #if defined(X3270_DBCS) /*[*/ 1835 #if defined(X3270_DBCS) /*[*/
1838 } 1836 }
1839 #endif /*]*/ 1837 #endif /*]*/
1840 - ctlr_add(h3270.buffer_addr, add_c1, default_cs);  
1841 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1842 - ctlr_add_bg(h3270.buffer_addr, default_bg);  
1843 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1844 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1838 + ctlr_add(h3270.buffer_addr, add_c1, h3270.default_cs);
  1839 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1840 + ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
  1841 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1842 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1845 INC_BA(h3270.buffer_addr); 1843 INC_BA(h3270.buffer_addr);
1846 #if defined(X3270_DBCS) /*[*/ 1844 #if defined(X3270_DBCS) /*[*/
1847 if (add_dbcs) { 1845 if (add_dbcs) {
1848 - ctlr_add(h3270.buffer_addr, add_c2, default_cs);  
1849 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1850 - ctlr_add_bg(h3270.buffer_addr, default_bg);  
1851 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1852 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1846 + ctlr_add(h3270.buffer_addr, add_c2, h3270.default_cs);
  1847 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1848 + ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
  1849 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1850 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1853 INC_BA(h3270.buffer_addr); 1851 INC_BA(h3270.buffer_addr);
1854 } 1852 }
1855 #endif /*]*/ 1853 #endif /*]*/
@@ -1875,7 +1873,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) @@ -1875,7 +1873,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1875 if (ctlr_dbcs_postprocess() < 0 && rv == PDS_OKAY_NO_OUTPUT) 1873 if (ctlr_dbcs_postprocess() < 0 && rv == PDS_OKAY_NO_OUTPUT)
1876 rv = PDS_BAD_ADDR; 1874 rv = PDS_BAD_ADDR;
1877 1875
1878 - trace_primed = False; 1876 + h3270.trace_primed = 0;
1879 1877
1880 ps_process(); 1878 ps_process();
1881 1879
@@ -1924,11 +1922,11 @@ ctlr_write_sscp_lu(unsigned char buf[], int buflen) @@ -1924,11 +1922,11 @@ ctlr_write_sscp_lu(unsigned char buf[], int buflen)
1924 */ 1922 */
1925 s_row = h3270.buffer_addr / h3270.cols; 1923 s_row = h3270.buffer_addr / h3270.cols;
1926 while ((h3270.buffer_addr / h3270.cols) == s_row) { 1924 while ((h3270.buffer_addr / h3270.cols) == s_row) {
1927 - ctlr_add(h3270.buffer_addr, EBC_null, default_cs);  
1928 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1929 - ctlr_add_bg(h3270.buffer_addr, default_bg);  
1930 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1931 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1925 + ctlr_add(h3270.buffer_addr, EBC_null, h3270.default_cs);
  1926 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1927 + ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
  1928 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1929 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1932 INC_BA(h3270.buffer_addr); 1930 INC_BA(h3270.buffer_addr);
1933 } 1931 }
1934 break; 1932 break;
@@ -1938,11 +1936,11 @@ ctlr_write_sscp_lu(unsigned char buf[], int buflen) @@ -1938,11 +1936,11 @@ ctlr_write_sscp_lu(unsigned char buf[], int buflen)
1938 cp++; 1936 cp++;
1939 i++; 1937 i++;
1940 trace_ds(" StartField%s %s [translated to space]\n",rcba(&h3270,h3270.buffer_addr), see_attr(*cp)); 1938 trace_ds(" StartField%s %s [translated to space]\n",rcba(&h3270,h3270.buffer_addr), see_attr(*cp));
1941 - ctlr_add(h3270.buffer_addr, EBC_space, default_cs);  
1942 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1943 - ctlr_add_bg(h3270.buffer_addr, default_bg);  
1944 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1945 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1939 + ctlr_add(h3270.buffer_addr, EBC_space, h3270.default_cs);
  1940 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1941 + ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
  1942 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1943 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1946 INC_BA(h3270.buffer_addr); 1944 INC_BA(h3270.buffer_addr);
1947 break; 1945 break;
1948 case ORDER_IC: 1946 case ORDER_IC:
@@ -1965,25 +1963,25 @@ ctlr_write_sscp_lu(unsigned char buf[], int buflen) @@ -1965,25 +1963,25 @@ ctlr_write_sscp_lu(unsigned char buf[], int buflen)
1965 else 1963 else
1966 c = *cp; 1964 c = *cp;
1967 ctlr_add(h3270.buffer_addr, c, CS_GE); 1965 ctlr_add(h3270.buffer_addr, c, CS_GE);
1968 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1969 - ctlr_add_bg(h3270.buffer_addr, default_bg);  
1970 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1971 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1966 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1967 + ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
  1968 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1969 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1972 INC_BA(h3270.buffer_addr); 1970 INC_BA(h3270.buffer_addr);
1973 break; 1971 break;
1974 1972
1975 default: 1973 default:
1976 - ctlr_add(h3270.buffer_addr, *cp, default_cs);  
1977 - ctlr_add_fg(h3270.buffer_addr, default_fg);  
1978 - ctlr_add_bg(h3270.buffer_addr, default_bg);  
1979 - ctlr_add_gr(h3270.buffer_addr, default_gr);  
1980 - ctlr_add_ic(h3270.buffer_addr, default_ic); 1974 + ctlr_add(h3270.buffer_addr, *cp, h3270.default_cs);
  1975 + ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1976 + ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
  1977 + ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
  1978 + ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1981 INC_BA(h3270.buffer_addr); 1979 INC_BA(h3270.buffer_addr);
1982 break; 1980 break;
1983 } 1981 }
1984 } 1982 }
1985 cursor_move(&h3270,h3270.buffer_addr); 1983 cursor_move(&h3270,h3270.buffer_addr);
1986 - sscp_start = h3270.buffer_addr; 1984 + h3270.sscp_start = h3270.buffer_addr;
1987 1985
1988 /* Unlock the keyboard. */ 1986 /* Unlock the keyboard. */
1989 h3270.aid = AID_NO; 1987 h3270.aid = AID_NO;
@@ -2329,39 +2327,40 @@ ctlr_clear(H3270 *session, Boolean can_snap) @@ -2329,39 +2327,40 @@ ctlr_clear(H3270 *session, Boolean can_snap)
2329 #endif /*]*/ 2327 #endif /*]*/
2330 2328
2331 /* Clear the screen. */ 2329 /* Clear the screen. */
2332 - trace("%p",session->ea_buf);  
2333 -  
2334 (void) memset((char *)session->ea_buf, 0, session->rows*session->cols*sizeof(struct ea)); 2330 (void) memset((char *)session->ea_buf, 0, session->rows*session->cols*sizeof(struct ea));
2335 - cursor_move(&h3270,0); 2331 + cursor_move(session,0);
2336 session->buffer_addr = 0; 2332 session->buffer_addr = 0;
2337 lib3270_unselect(session); 2333 lib3270_unselect(session);
2338 session->formatted = False; 2334 session->formatted = False;
2339 - default_fg = 0;  
2340 - default_bg = 0;  
2341 - default_gr = 0;  
2342 - default_ic = 0;  
2343 - sscp_start = 0; 2335 + session->default_fg = 0;
  2336 + session->default_bg = 0;
  2337 + session->default_gr = 0;
  2338 + session->default_ic = 0;
  2339 +
  2340 + session->sscp_start = 0;
2344 2341
2345 // ALL_CHANGED; 2342 // ALL_CHANGED;
2346 session->erase(session); 2343 session->erase(session);
2347 } 2344 }
2348 2345
2349 -/* 2346 +/**
2350 * Fill the screen buffer with blanks. 2347 * Fill the screen buffer with blanks.
  2348 + *
  2349 + * @param session Session handle
2351 */ 2350 */
2352 -static void  
2353 -ctlr_blanks(void) 2351 +static void ctlr_blanks(H3270 *session)
2354 { 2352 {
2355 int baddr; 2353 int baddr;
2356 2354
2357 - for (baddr = 0; baddr < h3270.rows*h3270.cols; baddr++) {  
2358 - if (!h3270.ea_buf[baddr].fa)  
2359 - h3270.ea_buf[baddr].cc = EBC_space; 2355 + for (baddr = 0; baddr < session->rows*session->cols; baddr++)
  2356 + {
  2357 + if (!session->ea_buf[baddr].fa)
  2358 + session->ea_buf[baddr].cc = EBC_space;
2360 } 2359 }
2361 - cursor_move(&h3270,0);  
2362 - h3270.buffer_addr = 0;  
2363 - lib3270_unselect(&h3270);  
2364 - h3270.formatted = False; 2360 + cursor_move(session,0);
  2361 + session->buffer_addr = 0;
  2362 + lib3270_unselect(session);
  2363 + session->formatted = False;
2365 ALL_CHANGED; 2364 ALL_CHANGED;
2366 } 2365 }
2367 2366
@@ -2376,13 +2375,13 @@ void ctlr_add(int baddr, unsigned char c, unsigned char cs) @@ -2376,13 +2375,13 @@ void ctlr_add(int baddr, unsigned char c, unsigned char cs)
2376 2375
2377 if(h3270.ea_buf[baddr].fa || ((oc = h3270.ea_buf[baddr].cc) != c || h3270.ea_buf[baddr].cs != cs)) 2376 if(h3270.ea_buf[baddr].fa || ((oc = h3270.ea_buf[baddr].cc) != c || h3270.ea_buf[baddr].cs != cs))
2378 { 2377 {
2379 - if (trace_primed && !IsBlank(oc)) 2378 + if (h3270.trace_primed && !IsBlank(oc))
2380 { 2379 {
2381 #if defined(X3270_TRACE) /*[*/ 2380 #if defined(X3270_TRACE) /*[*/
2382 if (lib3270_get_toggle(&h3270,LIB3270_TOGGLE_SCREEN_TRACE)) 2381 if (lib3270_get_toggle(&h3270,LIB3270_TOGGLE_SCREEN_TRACE))
2383 trace_screen(&h3270); 2382 trace_screen(&h3270);
2384 #endif /*]*/ 2383 #endif /*]*/
2385 - trace_primed = False; 2384 + h3270.trace_primed = 0;
2386 } 2385 }
2387 2386
2388 h3270.ea_buf[baddr].cc = c; 2387 h3270.ea_buf[baddr].cc = c;
src/lib3270/session.c
@@ -197,6 +197,8 @@ static void lib3270_session_init(H3270 *hSession, const char *model) @@ -197,6 +197,8 @@ static void lib3270_session_init(H3270 *hSession, const char *model)
197 hSession->oia_status = -1; 197 hSession->oia_status = -1;
198 hSession->kybdlock = KL_NOT_CONNECTED; 198 hSession->kybdlock = KL_NOT_CONNECTED;
199 hSession->aid = AID_NO; 199 hSession->aid = AID_NO;
  200 + hSession->reply_mode = SF_SRM_FIELD;
  201 +
200 202
201 #ifdef _WIN32 203 #ifdef _WIN32
202 hSession->sockEvent = NULL; 204 hSession->sockEvent = NULL;
src/lib3270/sf.c
@@ -67,9 +67,9 @@ @@ -67,9 +67,9 @@
67 #include "api.h" 67 #include "api.h"
68 68
69 // Externals 69 // Externals
70 -extern unsigned char reply_mode;  
71 -extern int crm_nattr;  
72 -extern unsigned char crm_attr[]; 70 +// extern unsigned char reply_mode;
  71 +// extern int crm_nattr;
  72 +// extern unsigned char crm_attr[];
73 73
74 /* Screen globals. */ 74 /* Screen globals. */
75 static int cw = 7; 75 static int cw = 7;
@@ -444,15 +444,15 @@ sf_set_reply_mode(unsigned char buf[], int buflen) @@ -444,15 +444,15 @@ sf_set_reply_mode(unsigned char buf[], int buflen)
444 trace_ds(" unknown mode 0x%02x\n", buf[4]); 444 trace_ds(" unknown mode 0x%02x\n", buf[4]);
445 return PDS_BAD_CMD; 445 return PDS_BAD_CMD;
446 } 446 }
447 - reply_mode = buf[4]; 447 + h3270.reply_mode = buf[4];
448 if (buf[4] == SF_SRM_CHAR) { 448 if (buf[4] == SF_SRM_CHAR) {
449 - crm_nattr = buflen - 5; 449 + h3270.crm_nattr = buflen - 5;
450 for (i = 5; i < buflen; i++) { 450 for (i = 5; i < buflen; i++) {
451 - crm_attr[i - 5] = buf[i]; 451 + h3270.crm_attr[i - 5] = buf[i];
452 trace_ds("%s%s", comma, see_efa_only(buf[i])); 452 trace_ds("%s%s", comma, see_efa_only(buf[i]));
453 comma = ","; 453 comma = ",";
454 } 454 }
455 - trace_ds("%s\n", crm_nattr ? ")" : ""); 455 + trace_ds("%s\n", h3270.crm_nattr ? ")" : "");
456 } 456 }
457 return PDS_OKAY_NO_OUTPUT; 457 return PDS_OKAY_NO_OUTPUT;
458 } 458 }