Commit 11f4b82e3cd5786d0c08fa96c782d0ba751b891c

Authored by perry.werneck@gmail.com
1 parent 6c517eb6

Migração para multi-sessão, mais ajustes. Migrando gtkbox para versão 3

src/include/lib3270/session.h
@@ -36,6 +36,7 @@ @@ -36,6 +36,7 @@
36 36
37 #define LIB3270_LUNAME_LENGTH 16 37 #define LIB3270_LUNAME_LENGTH 16
38 #define LIB3270_FULL_MODEL_NAME_LENGTH 13 38 #define LIB3270_FULL_MODEL_NAME_LENGTH 13
  39 + #define LIB3270_LU_MAX 32
39 40
40 #define LIB3270_TELNET_N_OPTS 256 41 #define LIB3270_TELNET_N_OPTS 256
41 42
@@ -207,6 +208,8 @@ @@ -207,6 +208,8 @@
207 char * proxy_host; 208 char * proxy_host;
208 char * proxy_portname; 209 char * proxy_portname;
209 unsigned short proxy_port; 210 unsigned short proxy_port;
  211 + char reported_lu[LIB3270_LU_MAX+1];
  212 + char reported_type[LIB3270_LU_MAX+1];
210 213
211 enum 214 enum
212 { 215 {
src/lib3270/telnet.c
@@ -215,14 +215,14 @@ static void check_linemode(H3270 *hSession, Boolean init); @@ -215,14 +215,14 @@ static void check_linemode(H3270 *hSession, Boolean init);
215 static int non_blocking(H3270 *session, Boolean on); 215 static int non_blocking(H3270 *session, Boolean on);
216 static void net_connected(H3270 *session); 216 static void net_connected(H3270 *session);
217 #if defined(X3270_TN3270E) /*[*/ 217 #if defined(X3270_TN3270E) /*[*/
218 -static int tn3270e_negotiate(void); 218 +static int tn3270e_negotiate(H3270 *hSession);
219 #endif /*]*/ 219 #endif /*]*/
220 static int process_eor(void); 220 static int process_eor(void);
221 #if defined(X3270_TN3270E) /*[*/ 221 #if defined(X3270_TN3270E) /*[*/
222 #if defined(X3270_TRACE) /*[*/ 222 #if defined(X3270_TRACE) /*[*/
223 static const char *tn3270e_function_names(const unsigned char *, int); 223 static const char *tn3270e_function_names(const unsigned char *, int);
224 #endif /*]*/ 224 #endif /*]*/
225 -static void tn3270e_subneg_send(unsigned char, unsigned long); 225 +static void tn3270e_subneg_send(H3270 *hSession, unsigned char, unsigned long);
226 static unsigned long tn3270e_fdecode(const unsigned char *, int); 226 static unsigned long tn3270e_fdecode(const unsigned char *, int);
227 static void tn3270e_ack(void); 227 static void tn3270e_ack(void);
228 static void tn3270e_nak(enum pds); 228 static void tn3270e_nak(enum pds);
@@ -240,7 +240,7 @@ static void do_eof(char c); @@ -240,7 +240,7 @@ static void do_eof(char c);
240 static void do_eol(char c); 240 static void do_eol(char c);
241 static void do_lnext(char c); 241 static void do_lnext(char c);
242 static char parse_ctlchar(char *s); 242 static char parse_ctlchar(char *s);
243 -static void cooked_init(void); 243 +static void cooked_init(H3270 *hSession);
244 #endif /*]*/ 244 #endif /*]*/
245 245
246 #if defined(X3270_TRACE) /*[*/ 246 #if defined(X3270_TRACE) /*[*/
@@ -1149,8 +1149,7 @@ set16(char *buf, int n) @@ -1149,8 +1149,7 @@ set16(char *buf, int n)
1149 * send_naws 1149 * send_naws
1150 * Send a Telnet window size sub-option negotation. 1150 * Send a Telnet window size sub-option negotation.
1151 */ 1151 */
1152 -static void  
1153 -send_naws(void) 1152 +static void send_naws(H3270 *hSession)
1154 { 1153 {
1155 char naws_msg[14]; 1154 char naws_msg[14];
1156 int naws_len = 0; 1155 int naws_len = 0;
@@ -1161,18 +1160,17 @@ send_naws(void) @@ -1161,18 +1160,17 @@ send_naws(void)
1161 naws_len += set16(naws_msg + naws_len, XMIT_ROWS); 1160 naws_len += set16(naws_msg + naws_len, XMIT_ROWS);
1162 (void) sprintf(naws_msg + naws_len, "%c%c", IAC, SE); 1161 (void) sprintf(naws_msg + naws_len, "%c%c", IAC, SE);
1163 naws_len += 2; 1162 naws_len += 2;
1164 - net_rawout(&h3270,(unsigned char *)naws_msg, naws_len); 1163 + net_rawout(hSession,(unsigned char *)naws_msg, naws_len);
1165 trace_dsn("SENT %s NAWS %d %d %s\n", cmd(SB), XMIT_COLS, XMIT_ROWS, cmd(SE)); 1164 trace_dsn("SENT %s NAWS %d %d %s\n", cmd(SB), XMIT_COLS, XMIT_ROWS, cmd(SE));
1166 } 1165 }
1167 1166
1168 1167
1169 1168
1170 /* Advance 'try_lu' to the next desired LU name. */ 1169 /* Advance 'try_lu' to the next desired LU name. */
1171 -static void  
1172 -next_lu(void) 1170 +static void next_lu(H3270 *hSession)
1173 { 1171 {
1174 - if (h3270.curr_lu != (char **)NULL && (h3270.try_lu = *++h3270.curr_lu) == CN)  
1175 - h3270.curr_lu = (char **)NULL; 1172 + if (hSession->curr_lu != (char **)NULL && (hSession->try_lu = *++hSession->curr_lu) == CN)
  1173 + hSession->curr_lu = (char **)NULL;
1176 } 1174 }
1177 1175
1178 /* 1176 /*
@@ -1202,7 +1200,7 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1202,7 +1200,7 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1202 if (IN_NEITHER) { /* now can assume ANSI mode */ 1200 if (IN_NEITHER) { /* now can assume ANSI mode */
1203 #if defined(X3270_ANSI)/*[*/ 1201 #if defined(X3270_ANSI)/*[*/
1204 if (session->linemode) 1202 if (session->linemode)
1205 - cooked_init(); 1203 + cooked_init(session);
1206 #endif /*]*/ 1204 #endif /*]*/
1207 host_in3270(session,CONNECTED_ANSI); 1205 host_in3270(session,CONNECTED_ANSI);
1208 kybdlock_clr(session,KL_AWAITING_FIRST, "telnet_fsm"); 1206 kybdlock_clr(session,KL_AWAITING_FIRST, "telnet_fsm");
@@ -1393,7 +1391,7 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1393,7 +1391,7 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1393 check_linemode(&h3270,False); 1391 check_linemode(&h3270,False);
1394 } 1392 }
1395 if (c == TELOPT_NAWS) 1393 if (c == TELOPT_NAWS)
1396 - send_naws(); 1394 + send_naws(&h3270);
1397 #if defined(HAVE_LIBSSL) /*[*/ 1395 #if defined(HAVE_LIBSSL) /*[*/
1398 if (c == TELOPT_STARTTLS) { 1396 if (c == TELOPT_STARTTLS) {
1399 static unsigned char follows_msg[] = { 1397 static unsigned char follows_msg[] = {
@@ -1485,12 +1483,12 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1485,12 +1483,12 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1485 lib3270_free(tt_out); 1483 lib3270_free(tt_out);
1486 1484
1487 /* Advance to the next LU name. */ 1485 /* Advance to the next LU name. */
1488 - next_lu(); 1486 + next_lu(&h3270);
1489 } 1487 }
1490 #if defined(X3270_TN3270E) /*[*/ 1488 #if defined(X3270_TN3270E) /*[*/
1491 else if (h3270.myopts[TELOPT_TN3270E] && 1489 else if (h3270.myopts[TELOPT_TN3270E] &&
1492 h3270.sbbuf[0] == TELOPT_TN3270E) { 1490 h3270.sbbuf[0] == TELOPT_TN3270E) {
1493 - if (tn3270e_negotiate()) 1491 + if (tn3270e_negotiate(&h3270))
1494 return -1; 1492 return -1;
1495 } 1493 }
1496 #endif /*]*/ 1494 #endif /*]*/
@@ -1575,35 +1573,35 @@ backoff_tn3270e(const char *why) @@ -1575,35 +1573,35 @@ backoff_tn3270e(const char *why)
1575 * Negotiation of TN3270E options. 1573 * Negotiation of TN3270E options.
1576 * Returns 0 if okay, -1 if we have to give up altogether. 1574 * Returns 0 if okay, -1 if we have to give up altogether.
1577 */ 1575 */
1578 -static int  
1579 -tn3270e_negotiate(void) 1576 +static int tn3270e_negotiate(H3270 *hSession)
1580 { 1577 {
1581 -#define LU_MAX 32  
1582 - static char reported_lu[LU_MAX+1];  
1583 - static char reported_type[LU_MAX+1]; 1578 +// #define LU_MAX 32
  1579 +// static char reported_lu[LU_MAX+1];
  1580 +// static char reported_type[LU_MAX+1];
  1581 +
1584 int sblen; 1582 int sblen;
1585 unsigned long e_rcvd; 1583 unsigned long e_rcvd;
1586 1584
1587 /* Find out how long the subnegotiation buffer is. */ 1585 /* Find out how long the subnegotiation buffer is. */
1588 for (sblen = 0; ; sblen++) { 1586 for (sblen = 0; ; sblen++) {
1589 - if (h3270.sbbuf[sblen] == SE) 1587 + if (hSession->sbbuf[sblen] == SE)
1590 break; 1588 break;
1591 } 1589 }
1592 1590
1593 trace_dsn("TN3270E "); 1591 trace_dsn("TN3270E ");
1594 1592
1595 - switch (h3270.sbbuf[1]) { 1593 + switch (hSession->sbbuf[1]) {
1596 1594
1597 case TN3270E_OP_SEND: 1595 case TN3270E_OP_SEND:
1598 1596
1599 - if (h3270.sbbuf[2] == TN3270E_OP_DEVICE_TYPE) { 1597 + if (hSession->sbbuf[2] == TN3270E_OP_DEVICE_TYPE) {
1600 1598
1601 /* Host wants us to send our device type. */ 1599 /* Host wants us to send our device type. */
1602 trace_dsn("SEND DEVICE-TYPE SE\n"); 1600 trace_dsn("SEND DEVICE-TYPE SE\n");
1603 1601
1604 tn3270e_request(); 1602 tn3270e_request();
1605 } else { 1603 } else {
1606 - trace_dsn("SEND ??%u SE\n", h3270.sbbuf[2]); 1604 + trace_dsn("SEND ??%u SE\n", hSession->sbbuf[2]);
1607 } 1605 }
1608 break; 1606 break;
1609 1607
@@ -1612,7 +1610,7 @@ tn3270e_negotiate(void) @@ -1612,7 +1610,7 @@ tn3270e_negotiate(void)
1612 /* Device type negotiation. */ 1610 /* Device type negotiation. */
1613 trace_dsn("DEVICE-TYPE "); 1611 trace_dsn("DEVICE-TYPE ");
1614 1612
1615 - switch (h3270.sbbuf[2]) { 1613 + switch (hSession->sbbuf[2]) {
1616 case TN3270E_OP_IS: { 1614 case TN3270E_OP_IS: {
1617 int tnlen, snlen; 1615 int tnlen, snlen;
1618 1616
@@ -1620,57 +1618,55 @@ tn3270e_negotiate(void) @@ -1620,57 +1618,55 @@ tn3270e_negotiate(void)
1620 1618
1621 /* Isolate the terminal type and session. */ 1619 /* Isolate the terminal type and session. */
1622 tnlen = 0; 1620 tnlen = 0;
1623 - while (h3270.sbbuf[3+tnlen] != SE &&  
1624 - h3270.sbbuf[3+tnlen] != TN3270E_OP_CONNECT) 1621 + while (hSession->sbbuf[3+tnlen] != SE &&
  1622 + hSession->sbbuf[3+tnlen] != TN3270E_OP_CONNECT)
1625 tnlen++; 1623 tnlen++;
1626 snlen = 0; 1624 snlen = 0;
1627 - if (h3270.sbbuf[3+tnlen] == TN3270E_OP_CONNECT) {  
1628 - while(h3270.sbbuf[3+tnlen+1+snlen] != SE) 1625 + if (hSession->sbbuf[3+tnlen] == TN3270E_OP_CONNECT) {
  1626 + while(hSession->sbbuf[3+tnlen+1+snlen] != SE)
1629 snlen++; 1627 snlen++;
1630 } 1628 }
1631 trace_dsn("IS %.*s CONNECT %.*s SE\n", 1629 trace_dsn("IS %.*s CONNECT %.*s SE\n",
1632 - tnlen, &h3270.sbbuf[3],  
1633 - snlen, &h3270.sbbuf[3+tnlen+1]); 1630 + tnlen, &hSession->sbbuf[3],
  1631 + snlen, &hSession->sbbuf[3+tnlen+1]);
1634 1632
1635 /* Remember the LU. */ 1633 /* Remember the LU. */
1636 if (tnlen) { 1634 if (tnlen) {
1637 - if (tnlen > LU_MAX)  
1638 - tnlen = LU_MAX;  
1639 - (void)strncpy(reported_type,  
1640 - (char *)&h3270.sbbuf[3], tnlen);  
1641 - reported_type[tnlen] = '\0';  
1642 - h3270.connected_type = reported_type; 1635 + if (tnlen > LIB3270_LU_MAX)
  1636 + tnlen = LIB3270_LU_MAX;
  1637 + (void)strncpy(hSession->reported_type,(char *)&hSession->sbbuf[3], tnlen);
  1638 + hSession->reported_type[tnlen] = '\0';
  1639 + hSession->connected_type = hSession->reported_type;
1643 } 1640 }
1644 if (snlen) { 1641 if (snlen) {
1645 - if (snlen > LU_MAX)  
1646 - snlen = LU_MAX;  
1647 - (void)strncpy(reported_lu,  
1648 - (char *)&h3270.sbbuf[3+tnlen+1], snlen);  
1649 - reported_lu[snlen] = '\0';  
1650 - h3270.connected_lu = reported_lu;  
1651 - status_lu(&h3270,h3270.connected_lu); 1642 + if (snlen > LIB3270_LU_MAX)
  1643 + snlen = LIB3270_LU_MAX;
  1644 + (void)strncpy(hSession->reported_lu,(char *)&hSession->sbbuf[3+tnlen+1], snlen);
  1645 + hSession->reported_lu[snlen] = '\0';
  1646 + hSession->connected_lu = hSession->reported_lu;
  1647 + status_lu(hSession,hSession->connected_lu);
1652 } 1648 }
1653 1649
1654 /* Tell them what we can do. */ 1650 /* Tell them what we can do. */
1655 - tn3270e_subneg_send(TN3270E_OP_REQUEST, h3270.e_funcs); 1651 + tn3270e_subneg_send(hSession, TN3270E_OP_REQUEST, hSession->e_funcs);
1656 break; 1652 break;
1657 } 1653 }
1658 case TN3270E_OP_REJECT: 1654 case TN3270E_OP_REJECT:
1659 1655
1660 /* Device type failure. */ 1656 /* Device type failure. */
1661 1657
1662 - trace_dsn("REJECT REASON %s SE\n", rsn(h3270.sbbuf[4]));  
1663 - if (h3270.sbbuf[4] == TN3270E_REASON_INV_DEVICE_TYPE ||  
1664 - h3270.sbbuf[4] == TN3270E_REASON_UNSUPPORTED_REQ) { 1658 + trace_dsn("REJECT REASON %s SE\n", rsn(hSession->sbbuf[4]));
  1659 + if (hSession->sbbuf[4] == TN3270E_REASON_INV_DEVICE_TYPE ||
  1660 + hSession->sbbuf[4] == TN3270E_REASON_UNSUPPORTED_REQ) {
1665 backoff_tn3270e(_( "Host rejected device type or request type" )); 1661 backoff_tn3270e(_( "Host rejected device type or request type" ));
1666 break; 1662 break;
1667 } 1663 }
1668 1664
1669 - next_lu();  
1670 - if (h3270.try_lu != CN) { 1665 + next_lu(hSession);
  1666 + if (hSession->try_lu != CN) {
1671 /* Try the next LU. */ 1667 /* Try the next LU. */
1672 tn3270e_request(); 1668 tn3270e_request();
1673 - } else if (h3270.lus != (char **)NULL) { 1669 + } else if (hSession->lus != (char **)NULL) {
1674 /* No more LUs to try. Give up. */ 1670 /* No more LUs to try. Give up. */
1675 backoff_tn3270e(_("Host rejected resource(s)")); 1671 backoff_tn3270e(_("Host rejected resource(s)"));
1676 } else { 1672 } else {
@@ -1679,7 +1675,7 @@ tn3270e_negotiate(void) @@ -1679,7 +1675,7 @@ tn3270e_negotiate(void)
1679 1675
1680 break; 1676 break;
1681 default: 1677 default:
1682 - trace_dsn("??%u SE\n", h3270.sbbuf[2]); 1678 + trace_dsn("??%u SE\n", hSession->sbbuf[2]);
1683 break; 1679 break;
1684 } 1680 }
1685 break; 1681 break;
@@ -1689,46 +1685,45 @@ tn3270e_negotiate(void) @@ -1689,46 +1685,45 @@ tn3270e_negotiate(void)
1689 /* Functions negotiation. */ 1685 /* Functions negotiation. */
1690 trace_dsn("FUNCTIONS "); 1686 trace_dsn("FUNCTIONS ");
1691 1687
1692 - switch (h3270.sbbuf[2]) { 1688 + switch (hSession->sbbuf[2]) {
1693 1689
1694 case TN3270E_OP_REQUEST: 1690 case TN3270E_OP_REQUEST:
1695 1691
1696 /* Host is telling us what functions they want. */ 1692 /* Host is telling us what functions they want. */
1697 trace_dsn("REQUEST %s SE\n", 1693 trace_dsn("REQUEST %s SE\n",
1698 - tn3270e_function_names(h3270.sbbuf+3, sblen-3)); 1694 + tn3270e_function_names(hSession->sbbuf+3, sblen-3));
1699 1695
1700 - e_rcvd = tn3270e_fdecode(h3270.sbbuf+3, sblen-3);  
1701 - if ((e_rcvd == h3270.e_funcs) || (h3270.e_funcs & ~e_rcvd)) { 1696 + e_rcvd = tn3270e_fdecode(hSession->sbbuf+3, sblen-3);
  1697 + if ((e_rcvd == hSession->e_funcs) || (hSession->e_funcs & ~e_rcvd)) {
1702 /* They want what we want, or less. Done. */ 1698 /* They want what we want, or less. Done. */
1703 - h3270.e_funcs = e_rcvd;  
1704 - tn3270e_subneg_send(TN3270E_OP_IS, h3270.e_funcs);  
1705 - h3270.tn3270e_negotiated = 1; 1699 + hSession->e_funcs = e_rcvd;
  1700 + tn3270e_subneg_send(hSession, TN3270E_OP_IS, hSession->e_funcs);
  1701 + hSession->tn3270e_negotiated = 1;
1706 trace_dsn("TN3270E option negotiation complete.\n"); 1702 trace_dsn("TN3270E option negotiation complete.\n");
1707 - check_in3270(&h3270); 1703 + check_in3270(hSession);
1708 } else { 1704 } else {
1709 /* 1705 /*
1710 * They want us to do something we can't. 1706 * They want us to do something we can't.
1711 * Request the common subset. 1707 * Request the common subset.
1712 */ 1708 */
1713 - h3270.e_funcs &= e_rcvd;  
1714 - tn3270e_subneg_send(TN3270E_OP_REQUEST,h3270.e_funcs); 1709 + hSession->e_funcs &= e_rcvd;
  1710 + tn3270e_subneg_send(hSession, TN3270E_OP_REQUEST,hSession->e_funcs);
1715 } 1711 }
1716 break; 1712 break;
1717 1713
1718 case TN3270E_OP_IS: 1714 case TN3270E_OP_IS:
1719 1715
1720 /* They accept our last request, or a subset thereof. */ 1716 /* They accept our last request, or a subset thereof. */
1721 - trace_dsn("IS %s SE\n",  
1722 - tn3270e_function_names(h3270.sbbuf+3, sblen-3));  
1723 - e_rcvd = tn3270e_fdecode(h3270.sbbuf+3, sblen-3);  
1724 - if (e_rcvd != h3270.e_funcs) {  
1725 - if (h3270.e_funcs & ~e_rcvd) { 1717 + trace_dsn("IS %s SE\n",tn3270e_function_names(hSession->sbbuf+3, sblen-3));
  1718 + e_rcvd = tn3270e_fdecode(hSession->sbbuf+3, sblen-3);
  1719 + if (e_rcvd != hSession->e_funcs) {
  1720 + if (hSession->e_funcs & ~e_rcvd) {
1726 /* 1721 /*
1727 * They've removed something. This is 1722 * They've removed something. This is
1728 * technically illegal, but we can 1723 * technically illegal, but we can
1729 * live with it. 1724 * live with it.
1730 */ 1725 */
1731 - h3270.e_funcs = e_rcvd; 1726 + hSession->e_funcs = e_rcvd;
1732 } else { 1727 } else {
1733 /* 1728 /*
1734 * They've added something. Abandon 1729 * They've added something. Abandon
@@ -1738,19 +1733,19 @@ tn3270e_negotiate(void) @@ -1738,19 +1733,19 @@ tn3270e_negotiate(void)
1738 break; 1733 break;
1739 } 1734 }
1740 } 1735 }
1741 - h3270.tn3270e_negotiated = 1; 1736 + hSession->tn3270e_negotiated = 1;
1742 trace_dsn("TN3270E option negotiation complete.\n"); 1737 trace_dsn("TN3270E option negotiation complete.\n");
1743 - check_in3270(&h3270); 1738 + check_in3270(hSession);
1744 break; 1739 break;
1745 1740
1746 default: 1741 default:
1747 - trace_dsn("??%u SE\n", h3270.sbbuf[2]); 1742 + trace_dsn("??%u SE\n", hSession->sbbuf[2]);
1748 break; 1743 break;
1749 } 1744 }
1750 break; 1745 break;
1751 1746
1752 default: 1747 default:
1753 - trace_dsn("??%u SE\n", h3270.sbbuf[1]); 1748 + trace_dsn("??%u SE\n", hSession->sbbuf[1]);
1754 } 1749 }
1755 1750
1756 /* Good enough for now. */ 1751 /* Good enough for now. */
@@ -1776,7 +1771,7 @@ tn3270e_function_names(const unsigned char *buf, int len) @@ -1776,7 +1771,7 @@ tn3270e_function_names(const unsigned char *buf, int len)
1776 } 1771 }
1777 #endif /*]*/ 1772 #endif /*]*/
1778 1773
1779 -/* Expand the current TN3270E function codes into text. */ 1774 +/* Expand the current TN3270E function codes into text. */ /*
1780 const char * 1775 const char *
1781 tn3270e_current_opts(void) 1776 tn3270e_current_opts(void)
1782 { 1777 {
@@ -1793,10 +1788,10 @@ tn3270e_current_opts(void) @@ -1793,10 +1788,10 @@ tn3270e_current_opts(void)
1793 } 1788 }
1794 return text_buf; 1789 return text_buf;
1795 } 1790 }
  1791 +*/
1796 1792
1797 /* Transmit a TN3270E FUNCTIONS REQUEST or FUNCTIONS IS message. */ 1793 /* Transmit a TN3270E FUNCTIONS REQUEST or FUNCTIONS IS message. */
1798 -static void  
1799 -tn3270e_subneg_send(unsigned char op, unsigned long funcs) 1794 +static void tn3270e_subneg_send(H3270 *hSession, unsigned char op, unsigned long funcs)
1800 { 1795 {
1801 unsigned char proto_buf[7 + 32]; 1796 unsigned char proto_buf[7 + 32];
1802 int proto_len; 1797 int proto_len;
@@ -1814,7 +1809,7 @@ tn3270e_subneg_send(unsigned char op, unsigned long funcs) @@ -1814,7 +1809,7 @@ tn3270e_subneg_send(unsigned char op, unsigned long funcs)
1814 /* Complete and send out the protocol message. */ 1809 /* Complete and send out the protocol message. */
1815 proto_buf[proto_len++] = IAC; 1810 proto_buf[proto_len++] = IAC;
1816 proto_buf[proto_len++] = SE; 1811 proto_buf[proto_len++] = SE;
1817 - net_rawout(&h3270, proto_buf, proto_len); 1812 + net_rawout(hSession, proto_buf, proto_len);
1818 1813
1819 /* Complete and send out the trace text. */ 1814 /* Complete and send out the trace text. */
1820 trace_dsn("SENT %s %s FUNCTIONS %s %s %s\n", 1815 trace_dsn("SENT %s %s FUNCTIONS %s %s %s\n",
@@ -1841,12 +1836,11 @@ tn3270e_fdecode(const unsigned char *buf, int len) @@ -1841,12 +1836,11 @@ tn3270e_fdecode(const unsigned char *buf, int len)
1841 #endif /*]*/ 1836 #endif /*]*/
1842 1837
1843 #if defined(X3270_TN3270E) /*[*/ 1838 #if defined(X3270_TN3270E) /*[*/
1844 -static void  
1845 -process_bind(unsigned char *buf, int buflen) 1839 +static void process_bind(H3270 *hSession, unsigned char *buf, int buflen)
1846 { 1840 {
1847 int namelen, i; 1841 int namelen, i;
1848 1842
1849 - (void) memset(h3270.plu_name, '\0', sizeof(h3270.plu_name)); 1843 + (void) memset(hSession->plu_name, '\0', sizeof(hSession->plu_name));
1850 1844
1851 /* Make sure it's a BIND. */ 1845 /* Make sure it's a BIND. */
1852 if (buflen < 1 || buf[0] != BIND_RU) { 1846 if (buflen < 1 || buf[0] != BIND_RU) {
@@ -1862,7 +1856,7 @@ process_bind(unsigned char *buf, int buflen) @@ -1862,7 +1856,7 @@ process_bind(unsigned char *buf, int buflen)
1862 if (namelen > BIND_PLU_NAME_MAX) 1856 if (namelen > BIND_PLU_NAME_MAX)
1863 namelen = BIND_PLU_NAME_MAX; 1857 namelen = BIND_PLU_NAME_MAX;
1864 for (i = 0; i < namelen; i++) { 1858 for (i = 0; i < namelen; i++) {
1865 - h3270.plu_name[i] = ebc2asc0[buf[BIND_OFF_PLU_NAME + i]]; 1859 + hSession->plu_name[i] = ebc2asc0[buf[BIND_OFF_PLU_NAME + i]];
1866 } 1860 }
1867 } 1861 }
1868 #endif /*]*/ 1862 #endif /*]*/
@@ -1906,7 +1900,7 @@ process_eor(void) @@ -1906,7 +1900,7 @@ process_eor(void)
1906 case TN3270E_DT_BIND_IMAGE: 1900 case TN3270E_DT_BIND_IMAGE:
1907 if (!(h3270.e_funcs & E_OPT(TN3270E_FUNC_BIND_IMAGE))) 1901 if (!(h3270.e_funcs & E_OPT(TN3270E_FUNC_BIND_IMAGE)))
1908 return 0; 1902 return 0;
1909 - process_bind(h3270.ibuf + EH_SIZE, (h3270.ibptr - h3270.ibuf) - EH_SIZE); 1903 + process_bind(&h3270, h3270.ibuf + EH_SIZE, (h3270.ibptr - h3270.ibuf) - EH_SIZE);
1910 trace_dsn("< BIND PLU-name '%s'\n", h3270.plu_name); 1904 trace_dsn("< BIND PLU-name '%s'\n", h3270.plu_name);
1911 h3270.tn3270e_bound = 1; 1905 h3270.tn3270e_bound = 1;
1912 check_in3270(&h3270); 1906 check_in3270(&h3270);
@@ -2051,14 +2045,14 @@ net_rawout(H3270 *session, unsigned const char *buf, int len) @@ -2051,14 +2045,14 @@ net_rawout(H3270 *session, unsigned const char *buf, int len)
2051 return; 2045 return;
2052 } 2046 }
2053 } 2047 }
2054 - h3270.ns_bsent += nw; 2048 + session->ns_bsent += nw;
2055 len -= nw; 2049 len -= nw;
2056 buf += nw; 2050 buf += nw;
2057 bot: 2051 bot:
2058 -#if defined(OMTU) /*[*/ 2052 +#if defined(OMTU)
2059 if (pause) 2053 if (pause)
2060 sleep(1); 2054 sleep(1);
2061 -#endif /*]*/ 2055 +#endif
2062 ; 2056 ;
2063 } 2057 }
2064 } 2058 }
@@ -2069,7 +2063,7 @@ net_rawout(H3270 *session, unsigned const char *buf, int len) @@ -2069,7 +2063,7 @@ net_rawout(H3270 *session, unsigned const char *buf, int len)
2069 * net_hexansi_out 2063 * net_hexansi_out
2070 * Send uncontrolled user data to the host in ANSI mode, performing IAC 2064 * Send uncontrolled user data to the host in ANSI mode, performing IAC
2071 * and CR quoting as necessary. 2065 * and CR quoting as necessary.
2072 - */ 2066 + */ /*
2073 void 2067 void
2074 net_hexansi_out(unsigned char *buf, int len) 2068 net_hexansi_out(unsigned char *buf, int len)
2075 { 2069 {
@@ -2079,8 +2073,8 @@ net_hexansi_out(unsigned char *buf, int len) @@ -2079,8 +2073,8 @@ net_hexansi_out(unsigned char *buf, int len)
2079 if (!len) 2073 if (!len)
2080 return; 2074 return;
2081 2075
2082 -#if defined(X3270_TRACE) /*[*/  
2083 - /* Trace the data. */ 2076 +#if defined(X3270_TRACE)
  2077 + // Trace the data.
2084 if (lib3270_get_toggle(&h3270,LIB3270_TOGGLE_DS_TRACE)) { 2078 if (lib3270_get_toggle(&h3270,LIB3270_TOGGLE_DS_TRACE)) {
2085 int i; 2079 int i;
2086 2080
@@ -2089,9 +2083,9 @@ net_hexansi_out(unsigned char *buf, int len) @@ -2089,9 +2083,9 @@ net_hexansi_out(unsigned char *buf, int len)
2089 trace_dsn(" %s", ctl_see((int) *(buf+i))); 2083 trace_dsn(" %s", ctl_see((int) *(buf+i)));
2090 trace_dsn("\n"); 2084 trace_dsn("\n");
2091 } 2085 }
2092 -#endif /*]*/ 2086 +#endif
2093 2087
2094 - /* Expand it. */ 2088 + // Expand it
2095 tbuf = xbuf = (unsigned char *)lib3270_malloc(2*len); 2089 tbuf = xbuf = (unsigned char *)lib3270_malloc(2*len);
2096 while (len) { 2090 while (len) {
2097 unsigned char c = *buf++; 2091 unsigned char c = *buf++;
@@ -2104,10 +2098,11 @@ net_hexansi_out(unsigned char *buf, int len) @@ -2104,10 +2098,11 @@ net_hexansi_out(unsigned char *buf, int len)
2104 *tbuf++ = '\0'; 2098 *tbuf++ = '\0';
2105 } 2099 }
2106 2100
2107 - /* Send it to the host. */ 2101 + // Send it to the host
2108 net_rawout(&h3270,xbuf, tbuf - xbuf); 2102 net_rawout(&h3270,xbuf, tbuf - xbuf);
2109 lib3270_free(xbuf); 2103 lib3270_free(xbuf);
2110 } 2104 }
  2105 +*/
2111 2106
2112 /* 2107 /*
2113 * net_cookedout 2108 * net_cookedout
@@ -2195,14 +2190,13 @@ static void net_cookout(H3270 *hSession, const char *buf, int len) @@ -2195,14 +2190,13 @@ static void net_cookout(H3270 *hSession, const char *buf, int len)
2195 * Cooked mode input processing. 2190 * Cooked mode input processing.
2196 */ 2191 */
2197 2192
2198 -static void  
2199 -cooked_init(void) 2193 +static void cooked_init(H3270 *hSession)
2200 { 2194 {
2201 - if (h3270.lbuf == (unsigned char *)NULL)  
2202 - h3270.lbuf = (unsigned char *)lib3270_malloc(BUFSZ);  
2203 - h3270.lbptr = h3270.lbuf;  
2204 - h3270.lnext = 0;  
2205 - h3270.backslashed = 0; 2195 + if (hSession->lbuf == (unsigned char *)NULL)
  2196 + hSession->lbuf = (unsigned char *)lib3270_malloc(BUFSZ);
  2197 + hSession->lbptr = hSession->lbuf;
  2198 + hSession->lnext = 0;
  2199 + hSession->backslashed = 0;
2206 } 2200 }
2207 2201
2208 static void 2202 static void
@@ -2216,7 +2210,7 @@ static void @@ -2216,7 +2210,7 @@ static void
2216 forward_data(void) 2210 forward_data(void)
2217 { 2211 {
2218 net_cookedout(&h3270, (char *) h3270.lbuf, h3270.lbptr - h3270.lbuf); 2212 net_cookedout(&h3270, (char *) h3270.lbuf, h3270.lbptr - h3270.lbuf);
2219 - cooked_init(); 2213 + cooked_init(&h3270);
2220 } 2214 }
2221 2215
2222 static void 2216 static void
@@ -2244,7 +2238,7 @@ static void do_intr(H3270 *hSession, char c) @@ -2244,7 +2238,7 @@ static void do_intr(H3270 *hSession, char c)
2244 return; 2238 return;
2245 } 2239 }
2246 ansi_process_s(ctl_see((int) c)); 2240 ansi_process_s(ctl_see((int) c));
2247 - cooked_init(); 2241 + cooked_init(hSession);
2248 net_interrupt(); 2242 net_interrupt();
2249 } 2243 }
2250 2244
@@ -2256,7 +2250,7 @@ static void do_quit(H3270 *hSession, char c) @@ -2256,7 +2250,7 @@ static void do_quit(H3270 *hSession, char c)
2256 return; 2250 return;
2257 } 2251 }
2258 ansi_process_s(ctl_see((int) c)); 2252 ansi_process_s(ctl_see((int) c));
2259 - cooked_init(); 2253 + cooked_init(hSession);
2260 net_break(); 2254 net_break();
2261 } 2255 }
2262 2256
@@ -2422,10 +2416,10 @@ check_in3270(H3270 *session) @@ -2422,10 +2416,10 @@ check_in3270(H3270 *session)
2422 #endif /*]*/ 2416 #endif /*]*/
2423 2417
2424 #if defined(X3270_TN3270E) /*[*/ 2418 #if defined(X3270_TN3270E) /*[*/
2425 - if (h3270.myopts[TELOPT_TN3270E]) {  
2426 - if (!h3270.tn3270e_negotiated) 2419 + if (session->myopts[TELOPT_TN3270E]) {
  2420 + if (!session->tn3270e_negotiated)
2427 new_cstate = CONNECTED_INITIAL_E; 2421 new_cstate = CONNECTED_INITIAL_E;
2428 - else switch (h3270.tn3270e_submode) { 2422 + else switch (session->tn3270e_submode) {
2429 case E_NONE: 2423 case E_NONE:
2430 new_cstate = CONNECTED_INITIAL_E; 2424 new_cstate = CONNECTED_INITIAL_E;
2431 break; 2425 break;
@@ -2441,11 +2435,11 @@ check_in3270(H3270 *session) @@ -2441,11 +2435,11 @@ check_in3270(H3270 *session)
2441 } 2435 }
2442 } else 2436 } else
2443 #endif /*]*/ 2437 #endif /*]*/
2444 - if (h3270.myopts[TELOPT_BINARY] &&  
2445 - h3270.myopts[TELOPT_EOR] &&  
2446 - h3270.myopts[TELOPT_TTYPE] &&  
2447 - h3270.hisopts[TELOPT_BINARY] &&  
2448 - h3270.hisopts[TELOPT_EOR]) { 2438 + if (session->myopts[TELOPT_BINARY] &&
  2439 + session->myopts[TELOPT_EOR] &&
  2440 + session->myopts[TELOPT_TTYPE] &&
  2441 + session->hisopts[TELOPT_BINARY] &&
  2442 + session->hisopts[TELOPT_EOR]) {
2449 new_cstate = CONNECTED_3270; 2443 new_cstate = CONNECTED_3270;
2450 } else if (session->cstate == CONNECTED_INITIAL) { 2444 } else if (session->cstate == CONNECTED_INITIAL) {
2451 /* Nothing has happened, yet. */ 2445 /* Nothing has happened, yet. */
@@ -2465,33 +2459,33 @@ check_in3270(H3270 *session) @@ -2465,33 +2459,33 @@ check_in3270(H3270 *session)
2465 * TN3270E mode, reset the LU list so we can try again 2459 * TN3270E mode, reset the LU list so we can try again
2466 * in the new mode. 2460 * in the new mode.
2467 */ 2461 */
2468 - if (h3270.lus != (char **)NULL && was_in_e != IN_E) {  
2469 - h3270.curr_lu = h3270.lus;  
2470 - h3270.try_lu = *h3270.curr_lu; 2462 + if (session->lus != (char **)NULL && was_in_e != IN_E) {
  2463 + session->curr_lu = session->lus;
  2464 + session->try_lu = *session->curr_lu;
2471 } 2465 }
2472 #endif /*]*/ 2466 #endif /*]*/
2473 2467
2474 /* Allocate the initial 3270 input buffer. */ 2468 /* Allocate the initial 3270 input buffer. */
2475 - if(new_cstate >= CONNECTED_INITIAL && !(h3270.ibuf_size && h3270.ibuf)) 2469 + if(new_cstate >= CONNECTED_INITIAL && !(session->ibuf_size && session->ibuf))
2476 { 2470 {
2477 - h3270.ibuf = (unsigned char *) lib3270_malloc(BUFSIZ);  
2478 - h3270.ibuf_size = BUFSIZ;  
2479 - h3270.ibptr = h3270.ibuf; 2471 + session->ibuf = (unsigned char *) lib3270_malloc(BUFSIZ);
  2472 + session->ibuf_size = BUFSIZ;
  2473 + session->ibptr = session->ibuf;
2480 } 2474 }
2481 2475
2482 #if defined(X3270_ANSI) /*[*/ 2476 #if defined(X3270_ANSI) /*[*/
2483 /* Reinitialize line mode. */ 2477 /* Reinitialize line mode. */
2484 - if ((new_cstate == CONNECTED_ANSI && h3270.linemode) || 2478 + if ((new_cstate == CONNECTED_ANSI && session->linemode) ||
2485 new_cstate == CONNECTED_NVT) 2479 new_cstate == CONNECTED_NVT)
2486 - cooked_init(); 2480 + cooked_init(session);
2487 #endif /*]*/ 2481 #endif /*]*/
2488 2482
2489 #if defined(X3270_TN3270E) /*[*/ 2483 #if defined(X3270_TN3270E) /*[*/
2490 /* If we fell out of TN3270E, remove the state. */ 2484 /* If we fell out of TN3270E, remove the state. */
2491 - if (!h3270.myopts[TELOPT_TN3270E]) {  
2492 - h3270.tn3270e_negotiated = 0;  
2493 - h3270.tn3270e_submode = E_NONE;  
2494 - h3270.tn3270e_bound = 0; 2485 + if (!session->myopts[TELOPT_TN3270E]) {
  2486 + session->tn3270e_negotiated = 0;
  2487 + session->tn3270e_submode = E_NONE;
  2488 + session->tn3270e_bound = 0;
2495 } 2489 }
2496 #endif /*]*/ 2490 #endif /*]*/
2497 trace_dsn("Now operating in %s mode.\n",state_name[new_cstate]); 2491 trace_dsn("Now operating in %s mode.\n",state_name[new_cstate]);
@@ -2575,7 +2569,7 @@ static void check_linemode(H3270 *hSession, Boolean init) @@ -2575,7 +2569,7 @@ static void check_linemode(H3270 *hSession, Boolean init)
2575 } 2569 }
2576 #if defined(X3270_ANSI) /*[*/ 2570 #if defined(X3270_ANSI) /*[*/
2577 if (IN_ANSI && hSession->linemode) 2571 if (IN_ANSI && hSession->linemode)
2578 - cooked_init(); 2572 + cooked_init(hSession);
2579 #endif /*]*/ 2573 #endif /*]*/
2580 } 2574 }
2581 } 2575 }
src/lib3270/telnetc.h
@@ -37,7 +37,7 @@ LIB3270_INTERNAL void net_charmode(void); @@ -37,7 +37,7 @@ LIB3270_INTERNAL void net_charmode(void);
37 LIB3270_INTERNAL int net_connect(H3270 *session, const char *, char *, Boolean, Boolean *, Boolean *); 37 LIB3270_INTERNAL int net_connect(H3270 *session, const char *, char *, Boolean, Boolean *, Boolean *);
38 LIB3270_INTERNAL void net_disconnect(H3270 *session); 38 LIB3270_INTERNAL void net_disconnect(H3270 *session);
39 LIB3270_INTERNAL void net_exception(H3270 *session); 39 LIB3270_INTERNAL void net_exception(H3270 *session);
40 -LIB3270_INTERNAL void net_hexansi_out(unsigned char *buf, int len); 40 +// LIB3270_INTERNAL void net_hexansi_out(unsigned char *buf, int len);
41 LIB3270_INTERNAL void net_input(H3270 *session); 41 LIB3270_INTERNAL void net_input(H3270 *session);
42 LIB3270_INTERNAL void net_interrupt(void); 42 LIB3270_INTERNAL void net_interrupt(void);
43 LIB3270_INTERNAL void net_linemode(void); 43 LIB3270_INTERNAL void net_linemode(void);
@@ -54,7 +54,7 @@ LIB3270_INTERNAL void net_send_kill(void); @@ -54,7 +54,7 @@ LIB3270_INTERNAL void net_send_kill(void);
54 LIB3270_INTERNAL void net_send_werase(void); 54 LIB3270_INTERNAL void net_send_werase(void);
55 LIB3270_INTERNAL Boolean net_snap_options(void); 55 LIB3270_INTERNAL Boolean net_snap_options(void);
56 LIB3270_INTERNAL void space3270out(int n); 56 LIB3270_INTERNAL void space3270out(int n);
57 -LIB3270_INTERNAL const char *tn3270e_current_opts(void); 57 +// LIB3270_INTERNAL const char *tn3270e_current_opts(void);
58 LIB3270_INTERNAL char *net_proxy_type(void); 58 LIB3270_INTERNAL char *net_proxy_type(void);
59 LIB3270_INTERNAL char *net_proxy_host(void); 59 LIB3270_INTERNAL char *net_proxy_host(void);
60 LIB3270_INTERNAL char *net_proxy_port(void); 60 LIB3270_INTERNAL char *net_proxy_port(void);
src/pw3270/colors.c
@@ -416,7 +416,12 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr) @@ -416,7 +416,12 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr)
416 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, 416 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
417 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, 417 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
418 NULL ); 418 NULL );
  419 +#if GTK_CHECK_VERSION(3,0,0)
  420 + GtkWidget * panned = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
  421 +#else
419 GtkWidget * panned = gtk_hbox_new(FALSE,2); 422 GtkWidget * panned = gtk_hbox_new(FALSE,2);
  423 +#endif // GTK(3,0,0)
  424 +
420 GtkWidget * tree; 425 GtkWidget * tree;
421 GtkWidget * color; 426 GtkWidget * color;
422 GdkColor saved[V3270_COLOR_COUNT]; 427 GdkColor saved[V3270_COLOR_COUNT];
@@ -489,7 +494,11 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr) @@ -489,7 +494,11 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr)
489 494
490 // Color scheme combo 495 // Color scheme combo
491 { 496 {
  497 +#if GTK_CHECK_VERSION(3,0,0)
  498 + GtkWidget * box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
  499 +#else
492 GtkWidget * box = gtk_hbox_new(FALSE,2); 500 GtkWidget * box = gtk_hbox_new(FALSE,2);
  501 +#endif // GTK(3,0,0)
493 GtkWidget * button = color_scheme_new(v3270_get_color_table(widget)); 502 GtkWidget * button = color_scheme_new(v3270_get_color_table(widget));
494 503
495 g_object_set_data(G_OBJECT(button),"terminal_widget",widget); 504 g_object_set_data(G_OBJECT(button),"terminal_widget",widget);
src/pw3270/dialog.c
@@ -67,7 +67,12 @@ @@ -67,7 +67,12 @@
67 67
68 static void add_option_menus(GtkWidget *widget, GtkAction *action, gchar **encoding) 68 static void add_option_menus(GtkWidget *widget, GtkAction *action, gchar **encoding)
69 { 69 {
70 - GtkWidget *box = gtk_hbox_new(FALSE,6); 70 +#if GTK_CHECK_VERSION(3,0,0)
  71 + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);
  72 +#else
  73 + GtkWidget *box = gtk_hbox_new(FALSE,6);
  74 +#endif // GTK(3,0,0)
  75 +
71 gchar *ptr = g_object_get_data(G_OBJECT(action),"charset"); 76 gchar *ptr = g_object_get_data(G_OBJECT(action),"charset");
72 77
73 if(ptr) 78 if(ptr)
src/pw3270/filetransfer.c
@@ -482,7 +482,12 @@ static void run_ft_dialog(GObject *action, GtkWidget *widget, struct ftdialog *d @@ -482,7 +482,12 @@ static void run_ft_dialog(GObject *action, GtkWidget *widget, struct ftdialog *d
482 GTK_STOCK_CLOSE,GTK_RESPONSE_CLOSE ); 482 GTK_STOCK_CLOSE,GTK_RESPONSE_CLOSE );
483 483
484 484
  485 +#if GTK_CHECK_VERSION(3,0,0)
  486 + container = gtk_box_new(GTK_ORIENTATION_VERTICAL,2);
  487 +#else
485 container = gtk_vbox_new(FALSE,2); 488 container = gtk_vbox_new(FALSE,2);
  489 +#endif // GTK(3,0,0)
  490 +
486 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(ftdialog))),container,TRUE,TRUE,2); 491 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(ftdialog))),container,TRUE,TRUE,2);
487 492
488 // Information frame 493 // Information frame
@@ -653,7 +658,11 @@ void download_action(GtkAction *action, GtkWidget *widget) @@ -653,7 +658,11 @@ void download_action(GtkAction *action, GtkWidget *widget)
653 658
654 { 659 {
655 /* Add dft option */ 660 /* Add dft option */
656 - GtkWidget *hbox = gtk_hbox_new(FALSE,2); 661 +#if GTK_CHECK_VERSION(3,0,0)
  662 + GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
  663 +#else
  664 + GtkWidget *hbox = gtk_hbox_new(FALSE,2);
  665 +#endif // GTK(3,0,0)
657 GtkWidget *label = NULL; 666 GtkWidget *label = NULL;
658 667
659 gtk_container_set_border_width(GTK_CONTAINER(hbox),4); 668 gtk_container_set_border_width(GTK_CONTAINER(hbox),4);
@@ -738,16 +747,27 @@ void upload_action(GtkAction *action, GtkWidget *widget) @@ -738,16 +747,27 @@ void upload_action(GtkAction *action, GtkWidget *widget)
738 { N_( "Space allocation units" ), "allocationunits", units } 747 { N_( "Space allocation units" ), "allocationunits", units }
739 }; 748 };
740 749
741 - GtkWidget *box = gtk_hbox_new(TRUE,2); 750 +
742 int f; 751 int f;
743 752
  753 +#if GTK_CHECK_VERSION(3,0,0)
  754 + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
  755 +#else
  756 + GtkWidget *box = gtk_hbox_new(TRUE,2);
  757 +#endif // GTK(3,0,0)
  758 +
744 for(f=0;f<2;f++) 759 for(f=0;f<2;f++)
745 { 760 {
746 GtkWidget * frame = gtk_frame_new(gettext(fdesk[f].title)); 761 GtkWidget * frame = gtk_frame_new(gettext(fdesk[f].title));
747 - GtkWidget * vbox = gtk_vbox_new(TRUE,2);  
748 GSList * group = NULL; 762 GSList * group = NULL;
749 gchar * setup = get_attribute(G_OBJECT(action),&dlg,fdesk[f].name); 763 gchar * setup = get_attribute(G_OBJECT(action),&dlg,fdesk[f].name);
750 int p; 764 int p;
  765 +#if GTK_CHECK_VERSION(3,0,0)
  766 + GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
  767 + gtk_box_set_homogeneous(GTK_BOX(vbox),TRUE);
  768 +#else
  769 + GtkWidget * vbox = gtk_vbox_new(TRUE,2);
  770 +#endif // GTK(3,0,0)
751 771
752 for(p=0;p<4;p++) 772 for(p=0;p<4;p++)
753 { 773 {
src/pw3270/uiparser/parser.c
@@ -161,8 +161,13 @@ static void release_action_group(GtkActionGroup ** group) @@ -161,8 +161,13 @@ static void release_action_group(GtkActionGroup ** group)
161 void parser_build(struct parser *p, GtkWidget *widget) 161 void parser_build(struct parser *p, GtkWidget *widget)
162 { 162 {
163 struct action_info a_info; 163 struct action_info a_info;
  164 +
  165 +#if GTK_CHECK_VERSION(3,0,0)
  166 + GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
  167 +#else
164 GtkWidget * vbox = gtk_vbox_new(FALSE,0); 168 GtkWidget * vbox = gtk_vbox_new(FALSE,0);
165 -// GtkWidget * hbox = gtk_hbox_new(FALSE,0); 169 +#endif // GTK(3,0,0)
  170 +
166 GtkWidget * parent; 171 GtkWidget * parent;
167 int f; 172 int f;
168 173