Commit 711c4c36ba68b81b6f8468ce3617a0c9bc2f7925

Authored by perry.werneck@gmail.com
1 parent 144ad4e8

Ajustes para multi-sessao

ansi.c
... ... @@ -606,7 +606,7 @@ ansi_reset(int ig1 unused, int ig2 unused)
606 606 held_wrap = False;
607 607 if (!first) {
608 608 ctlr_altbuffer(&h3270,True);
609   - ctlr_aclear(0, h3270.rows * h3270.cols, 1);
  609 + ctlr_aclear(&h3270, 0, h3270.rows * h3270.cols, 1);
610 610 ctlr_altbuffer(&h3270,False);
611 611 ctlr_clear(&h3270,False);
612 612 screen_80();
... ... @@ -634,7 +634,7 @@ ansi_insert_chars(int nn, int ig2 unused)
634 634 ctlr_bcopy(h3270.cursor_addr, h3270.cursor_addr + nn, ns, 1);
635 635  
636 636 /* Clear the middle of the line */
637   - ctlr_aclear(h3270.cursor_addr, nn, 1);
  637 + ctlr_aclear(&h3270, h3270.cursor_addr, nn, 1);
638 638 return DATA;
639 639 }
640 640  
... ... @@ -708,14 +708,14 @@ ansi_erase_in_display(int nn, int ig2 unused)
708 708 {
709 709 switch (nn) {
710 710 case 0: /* below */
711   - ctlr_aclear(h3270.cursor_addr, (h3270.rows * h3270.cols) - h3270.cursor_addr, 1);
  711 + ctlr_aclear(&h3270, h3270.cursor_addr, (h3270.rows * h3270.cols) - h3270.cursor_addr, 1);
712 712 break;
713 713 case 1: /* above */
714   - ctlr_aclear(0, h3270.cursor_addr + 1, 1);
  714 + ctlr_aclear(&h3270, 0, h3270.cursor_addr + 1, 1);
715 715 break;
716 716 case 2: /* all (without moving cursor) */
717 717 // if (h3270.cursor_addr == 0 && !h3270.is_altbuffer) scroll_save(h3270.rows, True);
718   - ctlr_aclear(0, h3270.rows * h3270.cols, 1);
  718 + ctlr_aclear(&h3270, 0, h3270.rows * h3270.cols, 1);
719 719 break;
720 720 }
721 721 return DATA;
... ... @@ -728,13 +728,13 @@ ansi_erase_in_line(int nn, int ig2 unused)
728 728  
729 729 switch (nn) {
730 730 case 0: /* to right */
731   - ctlr_aclear(h3270.cursor_addr, h3270.cols - nc, 1);
  731 + ctlr_aclear(&h3270, h3270.cursor_addr, h3270.cols - nc, 1);
732 732 break;
733 733 case 1: /* to left */
734   - ctlr_aclear(h3270.cursor_addr - nc, nc+1, 1);
  734 + ctlr_aclear(&h3270, h3270.cursor_addr - nc, nc+1, 1);
735 735 break;
736 736 case 2: /* all */
737   - ctlr_aclear(h3270.cursor_addr - nc, h3270.cols, 1);
  737 + ctlr_aclear(&h3270, h3270.cursor_addr - nc, h3270.cols, 1);
738 738 break;
739 739 }
740 740 return DATA;
... ... @@ -762,7 +762,7 @@ ansi_insert_lines(int nn, int ig2 unused)
762 762 ctlr_bcopy(rr * h3270.cols, (rr + nn) * h3270.cols, ns * h3270.cols, 1);
763 763  
764 764 /* Clear the middle of the screen */
765   - ctlr_aclear(rr * h3270.cols, nn * h3270.cols, 1);
  765 + ctlr_aclear(&h3270, rr * h3270.cols, nn * h3270.cols, 1);
766 766 return DATA;
767 767 }
768 768  
... ... @@ -788,7 +788,7 @@ ansi_delete_lines(int nn, int ig2 unused)
788 788 ctlr_bcopy((rr + nn) * h3270.cols, rr * h3270.cols, ns * h3270.cols, 1);
789 789  
790 790 /* Clear the rest of the screen */
791   - ctlr_aclear((rr + ns) * h3270.cols, nn * h3270.cols, 1);
  791 + ctlr_aclear(&h3270, (rr + ns) * h3270.cols, nn * h3270.cols, 1);
792 792 return DATA;
793 793 }
794 794  
... ... @@ -810,7 +810,7 @@ ansi_delete_chars(int nn, int ig2 unused)
810 810 ctlr_bcopy(h3270.cursor_addr + nn, h3270.cursor_addr, ns, 1);
811 811  
812 812 /* Clear the end of the line */
813   - ctlr_aclear(h3270.cursor_addr + ns, nn, 1);
  813 + ctlr_aclear(&h3270, h3270.cursor_addr + ns, nn, 1);
814 814 return DATA;
815 815 }
816 816  
... ... @@ -1069,16 +1069,15 @@ ansi_printing(int ig1 unused, int ig2 unused)
1069 1069 switch (csd[(once_cset != -1) ? once_cset : cset]) {
1070 1070 case CSD_LD: /* line drawing "0" */
1071 1071 if (ansi_ch >= 0x5f && ansi_ch <= 0x7e)
1072   - ctlr_add(h3270.cursor_addr, (unsigned char)(ansi_ch - 0x5f),
1073   - CS_LINEDRAW);
  1072 + ctlr_add(&h3270,h3270.cursor_addr, (unsigned char)(ansi_ch - 0x5f),CS_LINEDRAW);
1074 1073 else
1075   - ctlr_add(h3270.cursor_addr, asc2ebc[ansi_ch], CS_BASE);
  1074 + ctlr_add(&h3270,h3270.cursor_addr, asc2ebc[ansi_ch], CS_BASE);
1076 1075 break;
1077 1076 case CSD_UK: /* UK "A" */
1078 1077 if (ansi_ch == '#')
1079   - ctlr_add(h3270.cursor_addr, 0x1e, CS_LINEDRAW);
  1078 + ctlr_add(&h3270,h3270.cursor_addr, 0x1e, CS_LINEDRAW);
1080 1079 else
1081   - ctlr_add(h3270.cursor_addr, asc2ebc[ansi_ch], CS_BASE);
  1080 + ctlr_add(&h3270,h3270.cursor_addr, asc2ebc[ansi_ch], CS_BASE);
1082 1081 break;
1083 1082 case CSD_US: /* US "B" */
1084 1083 ebc_ch = asc2ebc[ansi_ch];
... ... @@ -1156,7 +1155,7 @@ ansi_printing(int ig1 unused, int ig2 unused)
1156 1155 ea_buf[cursor_addr].db = DBCS_NONE;
1157 1156 }
1158 1157 #endif /*]*/
1159   - ctlr_add(h3270.cursor_addr, ebc_ch, default_cs);
  1158 + ctlr_add(&h3270,h3270.cursor_addr, ebc_ch, default_cs);
1160 1159 #if defined(X3270_DBCS) /*[*/
1161 1160 if (default_cs == CS_DBCS)
1162 1161 (void) ctlr_dbcs_postprocess();
... ... @@ -1164,9 +1163,9 @@ ansi_printing(int ig1 unused, int ig2 unused)
1164 1163 break;
1165 1164 }
1166 1165 once_cset = -1;
1167   - ctlr_add_gr(h3270.cursor_addr, gr);
1168   - ctlr_add_fg(h3270.cursor_addr, fg);
1169   - ctlr_add_bg(h3270.cursor_addr, bg);
  1166 + ctlr_add_gr(&h3270,h3270.cursor_addr, gr);
  1167 + ctlr_add_fg(&h3270,h3270.cursor_addr, fg);
  1168 + ctlr_add_bg(&h3270,h3270.cursor_addr, bg);
1170 1169 if (wraparound_mode) {
1171 1170 /*
1172 1171 * There is a fascinating behavior of xterm which we will
... ... @@ -1588,40 +1587,43 @@ xterm_text(int ig1 unused, int ig2 unused)
1588 1587 static enum state
1589 1588 xterm_text_do(int ig1 unused, int ig2 unused)
1590 1589 {
1591   -#if defined(X3270_DISPLAY) || defined(WC3270) /*[*/
  1590 +/*
  1591 +#if defined(X3270_DISPLAY) || defined(WC3270)
1592 1592 text[tx] = '\0';
1593   -#endif /*]*/
  1593 +#endif
1594 1594  
1595   -#if defined(X3270_DISPLAY) /*[*/
  1595 +#if defined(X3270_DISPLAY)
1596 1596 switch (n[0]) {
1597   - case 0: /* icon name and window title */
  1597 + case 0: // icon name and window title
1598 1598 XtVaSetValues(toplevel, XtNiconName, text, NULL);
1599 1599 XtVaSetValues(toplevel, XtNtitle, text, NULL);
1600 1600 break;
1601   - case 1: /* icon name */
  1601 + case 1: // icon name
1602 1602 XtVaSetValues(toplevel, XtNiconName, text, NULL);
1603 1603 break;
1604   - case 2: /* window_title */
  1604 + case 2: // window_title
1605 1605 XtVaSetValues(toplevel, XtNtitle, text, NULL);
1606 1606 break;
1607   - case 50: /* font */
  1607 + case 50: // font
1608 1608 screen_newfont(text, False, False);
1609 1609 break;
1610 1610 default:
1611 1611 break;
1612 1612 }
1613   -#endif /*]*/
  1613 +#endif
1614 1614  
1615   -#if defined(WC3270) /*[*/
  1615 +
  1616 +#if defined(WC3270)
1616 1617 switch (n[0]) {
1617   - case 0: /* icon name and window title */
1618   - case 2: /* window_title */
  1618 + case 0: // icon name and window title
  1619 + case 2: // window_title
1619 1620 screen_title(text);
1620 1621 break;
1621 1622 default:
1622 1623 break;
1623 1624 }
1624   -#endif /*]*/
  1625 +#endif
  1626 +*/
1625 1627  
1626 1628 return DATA;
1627 1629 }
... ... @@ -1678,7 +1680,7 @@ ansi_scroll(void)
1678 1680 1);
1679 1681  
1680 1682 /* Clear the last line */
1681   - ctlr_aclear((scroll_bottom - 1) * h3270.cols, h3270.cols, 1);
  1683 + ctlr_aclear(&h3270, (scroll_bottom - 1) * h3270.cols, h3270.cols, 1);
1682 1684 }
1683 1685  
1684 1686 /* Callback for when we enter ANSI mode. */
... ...
ctlr.c
... ... @@ -73,7 +73,7 @@ static void ctlr_blanks(H3270 *session);
73 73 static void ctlr_half_connect(H3270 *session, int ignored, void *dunno);
74 74 static void ctlr_connect(H3270 *session, int ignored, void *dunno);
75 75 static void ticking_stop(H3270 *session);
76   -static void ctlr_add_ic(int baddr, unsigned char ic);
  76 +static void ctlr_add_ic(H3270 *session, int baddr, unsigned char ic);
77 77  
78 78 /*
79 79 * code_table is used to translate buffer addresses and attributes to the 3270
... ... @@ -478,7 +478,7 @@ process_ds(unsigned char *buf, int buflen)
478 478 case CMD_EAU: /* erase all unprotected */
479 479 case SNA_CMD_EAU:
480 480 trace_ds("EraseAllUnprotected\n");
481   - ctlr_erase_all_unprotected();
  481 + ctlr_erase_all_unprotected(&h3270);
482 482 return PDS_OKAY_NO_OUTPUT;
483 483 break;
484 484 case CMD_EWA: /* erase/write alternate */
... ... @@ -899,7 +899,7 @@ ctlr_read_buffer(unsigned char aid_byte)
899 899 #if defined(X3270_TRACE) /*[*/
900 900 /*
901 901 * Construct a 3270 command to reproduce the current state of the display.
902   - */
  902 + */ /*
903 903 void
904 904 ctlr_snap_buffer(void)
905 905 {
... ... @@ -920,7 +920,7 @@ ctlr_snap_buffer(void)
920 920 space3270out(4);
921 921 *obptr++ = ORDER_SFE;
922 922 attr_count = obptr - obuf;
923   - *obptr++ = 1; /* for now */
  923 + *obptr++ = 1; // for now
924 924 *obptr++ = XA_3270;
925 925 *obptr++ = code_table[h3270.ea_buf[baddr].fa & ~FA_PRINTABLE];
926 926 if (h3270.ea_buf[baddr].fg) {
... ... @@ -998,12 +998,12 @@ ctlr_snap_buffer(void)
998 998 *obptr++ = ORDER_SBA;
999 999 ENCODE_BADDR(obptr, h3270.cursor_addr);
1000 1000 *obptr++ = ORDER_IC;
1001   -}
  1001 +} */
1002 1002  
1003 1003 /*
1004 1004 * Construct a 3270 command to reproduce the reply mode.
1005 1005 * Returns a Boolean indicating if one is necessary.
1006   - */
  1006 + */ /*
1007 1007 Boolean
1008 1008 ctlr_snap_modes(void)
1009 1009 {
... ... @@ -1014,70 +1014,69 @@ ctlr_snap_modes(void)
1014 1014  
1015 1015 space3270out(6 + h3270.crm_nattr);
1016 1016 *obptr++ = CMD_WSF;
1017   - *obptr++ = 0x00; /* implicit length */
  1017 + *obptr++ = 0x00; // implicit length
1018 1018 *obptr++ = 0x00;
1019 1019 *obptr++ = SF_SET_REPLY_MODE;
1020   - *obptr++ = 0x00; /* partition 0 */
  1020 + *obptr++ = 0x00; // partition 0
1021 1021 *obptr++ = h3270.reply_mode;
1022 1022 if (h3270.reply_mode == SF_SRM_CHAR)
1023 1023 for (i = 0; i < h3270.crm_nattr; i++)
1024 1024 *obptr++ = h3270.crm_attr[i];
1025 1025 return True;
1026   -}
1027   -#endif /*]*/
  1026 +} */
  1027 +#endif
1028 1028  
1029 1029  
1030 1030 /*
1031 1031 * Process a 3270 Erase All Unprotected command.
1032 1032 */
1033   -void
1034   -ctlr_erase_all_unprotected(void)
  1033 +void ctlr_erase_all_unprotected(H3270 *hSession)
1035 1034 {
1036 1035 register int baddr, sbaddr;
1037 1036 unsigned char fa;
1038 1037 Boolean f;
1039 1038  
1040   - kybd_inhibit(&h3270,False);
  1039 + kybd_inhibit(hSession,False);
1041 1040  
1042   - if (h3270.formatted) {
  1041 + if (hSession->formatted) {
1043 1042 /* find first field attribute */
1044 1043 baddr = 0;
1045 1044 do {
1046   - if (h3270.ea_buf[baddr].fa)
  1045 + if (hSession->ea_buf[baddr].fa)
1047 1046 break;
1048 1047 INC_BA(baddr);
1049 1048 } while (baddr != 0);
1050 1049 sbaddr = baddr;
1051 1050 f = False;
1052 1051 do {
1053   - fa = h3270.ea_buf[baddr].fa;
  1052 + fa = hSession->ea_buf[baddr].fa;
1054 1053 if (!FA_IS_PROTECTED(fa)) {
1055 1054 mdt_clear(baddr);
1056 1055 do {
1057 1056 INC_BA(baddr);
1058 1057 if (!f) {
1059   - cursor_move(&h3270,baddr);
  1058 + cursor_move(hSession,baddr);
1060 1059 f = True;
1061 1060 }
1062   - if (!h3270.ea_buf[baddr].fa) {
1063   - ctlr_add(baddr, EBC_null, 0);
  1061 + if (!hSession->ea_buf[baddr].fa) {
  1062 + ctlr_add(hSession,baddr, EBC_null, 0);
1064 1063 }
1065   - } while (!h3270.ea_buf[baddr].fa);
  1064 + } while (!hSession->ea_buf[baddr].fa);
1066 1065 }
1067 1066 else {
1068 1067 do {
1069 1068 INC_BA(baddr);
1070   - } while (!h3270.ea_buf[baddr].fa);
  1069 + } while (!hSession->ea_buf[baddr].fa);
1071 1070 }
1072 1071 } while (baddr != sbaddr);
1073 1072 if (!f)
1074   - cursor_move(&h3270,0);
  1073 + cursor_move(hSession,0);
1075 1074 } else {
1076   - ctlr_clear(&h3270,True);
  1075 + ctlr_clear(hSession,True);
1077 1076 }
1078   - h3270.aid = AID_NO;
1079   - do_reset(&h3270,False);
1080   - ALL_CHANGED(&h3270);
  1077 + hSession->aid = AID_NO;
  1078 + do_reset(hSession,False);
  1079 + ALL_CHANGED(hSession);
1081 1080 }
1082 1081  
1083 1082  
... ... @@ -1122,12 +1121,12 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1122 1121 /* XXX: Should there be a ctlr_add_cs call here? */
1123 1122 #define START_FIELD(fa) { \
1124 1123 current_fa = fa; \
1125   - ctlr_add_fa(h3270.buffer_addr, fa, 0); \
1126   - ctlr_add_cs(h3270.buffer_addr, 0); \
1127   - ctlr_add_fg(h3270.buffer_addr, 0); \
1128   - ctlr_add_bg(h3270.buffer_addr, 0); \
1129   - ctlr_add_gr(h3270.buffer_addr, 0); \
1130   - ctlr_add_ic(h3270.buffer_addr, 0); \
  1124 + ctlr_add_fa(&h3270,h3270.buffer_addr, fa, 0); \
  1125 + ctlr_add_cs(&h3270,h3270.buffer_addr, 0); \
  1126 + ctlr_add_fg(&h3270,h3270.buffer_addr, 0); \
  1127 + ctlr_add_bg(&h3270,h3270.buffer_addr, 0); \
  1128 + ctlr_add_gr(&h3270,h3270.buffer_addr, 0); \
  1129 + ctlr_add_ic(&h3270,h3270.buffer_addr, 0); \
1131 1130 trace_ds("%s",see_attr(fa)); \
1132 1131 h3270.formatted = True; \
1133 1132 }
... ... @@ -1203,8 +1202,8 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1203 1202 previous = ORDER;
1204 1203 cp++; /* skip field attribute */
1205 1204 START_FIELD(*cp);
1206   - ctlr_add_fg(h3270.buffer_addr, 0);
1207   - ctlr_add_bg(h3270.buffer_addr, 0);
  1205 + ctlr_add_fg(&h3270,h3270.buffer_addr, 0);
  1206 + ctlr_add_bg(&h3270,h3270.buffer_addr, 0);
1208 1207 INC_BA(h3270.buffer_addr);
1209 1208 last_cmd = True;
1210 1209 last_zpt = False;
... ... @@ -1265,12 +1264,12 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1265 1264 trace_ds("(nulling)");
1266 1265 while ((h3270.buffer_addr != baddr) &&
1267 1266 (!h3270.ea_buf[h3270.buffer_addr].fa)) {
1268   - ctlr_add(h3270.buffer_addr, EBC_null, 0);
1269   - ctlr_add_cs(h3270.buffer_addr, 0);
1270   - ctlr_add_fg(h3270.buffer_addr, 0);
1271   - ctlr_add_bg(h3270.buffer_addr, 0);
1272   - ctlr_add_gr(h3270.buffer_addr, 0);
1273   - ctlr_add_ic(h3270.buffer_addr, 0);
  1267 + ctlr_add(&h3270,h3270.buffer_addr, EBC_null, 0);
  1268 + ctlr_add_cs(&h3270,h3270.buffer_addr, 0);
  1269 + ctlr_add_fg(&h3270,h3270.buffer_addr, 0);
  1270 + ctlr_add_bg(&h3270,h3270.buffer_addr, 0);
  1271 + ctlr_add_gr(&h3270,h3270.buffer_addr, 0);
  1272 + ctlr_add_ic(&h3270,h3270.buffer_addr, 0);
1274 1273 INC_BA(h3270.buffer_addr);
1275 1274 }
1276 1275 if (baddr == 0)
... ... @@ -1352,25 +1351,25 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1352 1351 }
1353 1352 do {
1354 1353 if (add_dbcs) {
1355   - ctlr_add(h3270.buffer_addr, add_c1,h3270.default_cs);
  1354 + ctlr_add(&h3270,h3270.buffer_addr, add_c1,h3270.default_cs);
1356 1355 } else {
1357 1356 if (ra_ge)
1358   - ctlr_add(h3270.buffer_addr, add_c1,CS_GE);
  1357 + ctlr_add(&h3270,h3270.buffer_addr, add_c1,CS_GE);
1359 1358 else if (h3270.default_cs)
1360   - ctlr_add(h3270.buffer_addr, add_c1,h3270.default_cs);
  1359 + ctlr_add(&h3270,h3270.buffer_addr, add_c1,h3270.default_cs);
1361 1360 else
1362   - ctlr_add(h3270.buffer_addr, add_c1,0);
  1361 + ctlr_add(&h3270,h3270.buffer_addr, add_c1,0);
1363 1362 }
1364   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
1365   - ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1366   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
  1363 + ctlr_add_fg(&h3270,h3270.buffer_addr, h3270.default_fg);
  1364 + ctlr_add_gr(&h3270,h3270.buffer_addr, h3270.default_gr);
  1365 + ctlr_add_ic(&h3270,h3270.buffer_addr, h3270.default_ic);
1367 1366 INC_BA(h3270.buffer_addr);
1368 1367 if (add_dbcs) {
1369   - ctlr_add(h3270.buffer_addr, add_c2,h3270.default_cs);
1370   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
1371   - ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
1372   - ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1373   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
  1368 + ctlr_add(&h3270,h3270.buffer_addr, add_c2,h3270.default_cs);
  1369 + ctlr_add_fg(&h3270,h3270.buffer_addr, h3270.default_fg);
  1370 + ctlr_add_bg(&h3270,h3270.buffer_addr, h3270.default_bg);
  1371 + ctlr_add_gr(&h3270,h3270.buffer_addr, h3270.default_gr);
  1372 + ctlr_add_ic(&h3270,h3270.buffer_addr, h3270.default_ic);
1374 1373 INC_BA(h3270.buffer_addr);
1375 1374 }
1376 1375 } while (h3270.buffer_addr != baddr);
... ... @@ -1400,7 +1399,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1400 1399 if (h3270.ea_buf[h3270.buffer_addr].fa)
1401 1400 current_fa = h3270.ea_buf[h3270.buffer_addr].fa;
1402 1401 else if (!FA_IS_PROTECTED(current_fa)) {
1403   - ctlr_add(h3270.buffer_addr, EBC_null,
  1402 + ctlr_add(&h3270,h3270.buffer_addr, EBC_null,
1404 1403 CS_BASE);
1405 1404 }
1406 1405 INC_BA(h3270.buffer_addr);
... ... @@ -1419,11 +1418,11 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1419 1418 trace_ds("%s", see_ebc(*cp));
1420 1419 if (*cp)
1421 1420 trace_ds("'");
1422   - ctlr_add(h3270.buffer_addr, *cp, CS_GE);
1423   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
1424   - ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
1425   - ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1426   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
  1421 + ctlr_add(&h3270,h3270.buffer_addr, *cp, CS_GE);
  1422 + ctlr_add_fg(&h3270,h3270.buffer_addr, h3270.default_fg);
  1423 + ctlr_add_bg(&h3270,h3270.buffer_addr, h3270.default_bg);
  1424 + ctlr_add_gr(&h3270,h3270.buffer_addr, h3270.default_gr);
  1425 + ctlr_add_ic(&h3270,h3270.buffer_addr, h3270.default_ic);
1427 1426 INC_BA(h3270.buffer_addr);
1428 1427 current_fa = get_field_attribute(&h3270,h3270.buffer_addr);
1429 1428 last_cmd = False;
... ... @@ -1442,7 +1441,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1442 1441 if (*cp == XA_3270) {
1443 1442 trace_ds(" 3270");
1444 1443 cp++;
1445   - ctlr_add_fa(h3270.buffer_addr, *cp,
  1444 + ctlr_add_fa(&h3270,h3270.buffer_addr, *cp,
1446 1445 h3270.ea_buf[h3270.buffer_addr].cs);
1447 1446 trace_ds("%s",see_attr(*cp));
1448 1447 } else if (*cp == XA_FOREGROUND) {
... ... @@ -1451,20 +1450,20 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1451 1450 *(cp + 1)));
1452 1451 cp++;
1453 1452 if (h3270.m3279)
1454   - ctlr_add_fg(h3270.buffer_addr, *cp);
  1453 + ctlr_add_fg(&h3270,h3270.buffer_addr, *cp);
1455 1454 } else if (*cp == XA_BACKGROUND) {
1456 1455 trace_ds("%s",
1457 1456 see_efa(*cp,
1458 1457 *(cp + 1)));
1459 1458 cp++;
1460 1459 if (h3270.m3279)
1461   - ctlr_add_bg(h3270.buffer_addr, *cp);
  1460 + ctlr_add_bg(&h3270,h3270.buffer_addr, *cp);
1462 1461 } else if (*cp == XA_HIGHLIGHTING) {
1463 1462 trace_ds("%s",
1464 1463 see_efa(*cp,
1465 1464 *(cp + 1)));
1466 1465 cp++;
1467   - ctlr_add_gr(h3270.buffer_addr, *cp & 0x0f);
  1466 + ctlr_add_gr(&h3270,h3270.buffer_addr, *cp & 0x0f);
1468 1467 } else if (*cp == XA_CHARSET) {
1469 1468 int cs = 0;
1470 1469  
... ... @@ -1476,7 +1475,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1476 1475 cs = CS_APL;
1477 1476 else if (*cp == 0xf8)
1478 1477 cs = CS_DBCS;
1479   - ctlr_add_cs(h3270.buffer_addr, cs);
  1478 + ctlr_add_cs(&h3270,h3270.buffer_addr, cs);
1480 1479 } else if (*cp == XA_ALL) {
1481 1480 trace_ds("%s",
1482 1481 see_efa(*cp,
... ... @@ -1486,7 +1485,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1486 1485 trace_ds("%s",
1487 1486 see_efa(*cp,
1488 1487 *(cp + 1)));
1489   - ctlr_add_ic(h3270.buffer_addr,
  1488 + ctlr_add_ic(&h3270,h3270.buffer_addr,
1490 1489 (*(cp + 1) == 1));
1491 1490 cp++;
1492 1491 } else {
... ... @@ -1558,11 +1557,11 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1558 1557 }
1559 1558 if (!any_fa)
1560 1559 START_FIELD(0);
1561   - ctlr_add_cs(h3270.buffer_addr, efa_cs);
1562   - ctlr_add_fg(h3270.buffer_addr, efa_fg);
1563   - ctlr_add_bg(h3270.buffer_addr, efa_bg);
1564   - ctlr_add_gr(h3270.buffer_addr, efa_gr);
1565   - ctlr_add_ic(h3270.buffer_addr, efa_ic);
  1560 + ctlr_add_cs(&h3270,h3270.buffer_addr, efa_cs);
  1561 + ctlr_add_fg(&h3270,h3270.buffer_addr, efa_fg);
  1562 + ctlr_add_bg(&h3270,h3270.buffer_addr, efa_bg);
  1563 + ctlr_add_gr(&h3270,h3270.buffer_addr, efa_gr);
  1564 + ctlr_add_ic(&h3270,h3270.buffer_addr, efa_ic);
1566 1565 INC_BA(h3270.buffer_addr);
1567 1566 last_cmd = True;
1568 1567 last_zpt = False;
... ... @@ -1629,11 +1628,11 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1629 1628 if (h3270.default_cs == CS_DBCS || d != DBCS_NONE) {
1630 1629 ABORT_WRITE("invalid format control order in DBCS field");
1631 1630 }
1632   - ctlr_add(h3270.buffer_addr, *cp, h3270.default_cs);
1633   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
1634   - ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
1635   - ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1636   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
  1631 + ctlr_add(&h3270,h3270.buffer_addr, *cp, h3270.default_cs);
  1632 + ctlr_add_fg(&h3270,h3270.buffer_addr, h3270.default_fg);
  1633 + ctlr_add_bg(&h3270,h3270.buffer_addr, h3270.default_bg);
  1634 + ctlr_add_gr(&h3270,h3270.buffer_addr, h3270.default_gr);
  1635 + ctlr_add_ic(&h3270,h3270.buffer_addr, h3270.default_ic);
1637 1636 INC_BA(h3270.buffer_addr);
1638 1637 last_cmd = True;
1639 1638 last_zpt = False;
... ... @@ -1653,11 +1652,11 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1653 1652 }
1654 1653 /* All is well. */
1655 1654 previous = ORDER;
1656   - ctlr_add(h3270.buffer_addr, *cp, h3270.default_cs);
1657   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
1658   - ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
1659   - ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1660   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
  1655 + ctlr_add(&h3270,h3270.buffer_addr, *cp, h3270.default_cs);
  1656 + ctlr_add_fg(&h3270,h3270.buffer_addr, h3270.default_fg);
  1657 + ctlr_add_bg(&h3270,h3270.buffer_addr, h3270.default_bg);
  1658 + ctlr_add_gr(&h3270,h3270.buffer_addr, h3270.default_gr);
  1659 + ctlr_add_ic(&h3270,h3270.buffer_addr, h3270.default_ic);
1661 1660 INC_BA(h3270.buffer_addr);
1662 1661 last_cmd = True;
1663 1662 last_zpt = False;
... ... @@ -1692,11 +1691,11 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1692 1691 }
1693 1692 /* All is well. */
1694 1693 previous = ORDER;
1695   - ctlr_add(h3270.buffer_addr, *cp, h3270.default_cs);
1696   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
1697   - ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
1698   - ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1699   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
  1694 + ctlr_add(&h3270,h3270.buffer_addr, *cp, h3270.default_cs);
  1695 + ctlr_add_fg(&h3270,h3270.buffer_addr, h3270.default_fg);
  1696 + ctlr_add_bg(&h3270,h3270.buffer_addr, h3270.default_bg);
  1697 + ctlr_add_gr(&h3270,h3270.buffer_addr, h3270.default_gr);
  1698 + ctlr_add_ic(&h3270,h3270.buffer_addr, h3270.default_ic);
1700 1699 INC_BA(h3270.buffer_addr);
1701 1700 last_cmd = True;
1702 1701 last_zpt = False;
... ... @@ -1745,18 +1744,18 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1745 1744 END_TEXT("NULL");
1746 1745 add_c1 = *cp;
1747 1746 }
1748   - ctlr_add(h3270.buffer_addr, add_c1, h3270.default_cs);
1749   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
1750   - ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
1751   - ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1752   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
  1747 + ctlr_add(&h3270,h3270.buffer_addr, add_c1, h3270.default_cs);
  1748 + ctlr_add_fg(&h3270,h3270.buffer_addr, h3270.default_fg);
  1749 + ctlr_add_bg(&h3270,h3270.buffer_addr, h3270.default_bg);
  1750 + ctlr_add_gr(&h3270,h3270.buffer_addr, h3270.default_gr);
  1751 + ctlr_add_ic(&h3270,h3270.buffer_addr, h3270.default_ic);
1753 1752 INC_BA(h3270.buffer_addr);
1754 1753 if (add_dbcs) {
1755   - ctlr_add(h3270.buffer_addr, add_c2, h3270.default_cs);
1756   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
1757   - ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
1758   - ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1759   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
  1754 + ctlr_add(&h3270,h3270.buffer_addr, add_c2, h3270.default_cs);
  1755 + ctlr_add_fg(&h3270,h3270.buffer_addr, h3270.default_fg);
  1756 + ctlr_add_bg(&h3270,h3270.buffer_addr, h3270.default_bg);
  1757 + ctlr_add_gr(&h3270,h3270.buffer_addr, h3270.default_gr);
  1758 + ctlr_add_ic(&h3270,h3270.buffer_addr, h3270.default_ic);
1760 1759 INC_BA(h3270.buffer_addr);
1761 1760 }
1762 1761 last_cmd = False;
... ... @@ -1803,19 +1802,19 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1803 1802 #if defined(X3270_DBCS) /*[*/
1804 1803 }
1805 1804 #endif /*]*/
1806   - ctlr_add(h3270.buffer_addr, add_c1, h3270.default_cs);
1807   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
1808   - ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
1809   - ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1810   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
  1805 + ctlr_add(&h3270,h3270.buffer_addr, add_c1, h3270.default_cs);
  1806 + ctlr_add_fg(&h3270,h3270.buffer_addr, h3270.default_fg);
  1807 + ctlr_add_bg(&h3270,h3270.buffer_addr, h3270.default_bg);
  1808 + ctlr_add_gr(&h3270,h3270.buffer_addr, h3270.default_gr);
  1809 + ctlr_add_ic(&h3270,h3270.buffer_addr, h3270.default_ic);
1811 1810 INC_BA(h3270.buffer_addr);
1812 1811 #if defined(X3270_DBCS) /*[*/
1813 1812 if (add_dbcs) {
1814 1813 ctlr_add(h3270.buffer_addr, add_c2, h3270.default_cs);
1815   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
  1814 + ctlr_add_fg(&h3270,h3270.buffer_addr, h3270.default_fg);
1816 1815 ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
1817 1816 ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1818   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
  1817 + ctlr_add_ic(&h3270,h3270.buffer_addr, h3270.default_ic);
1819 1818 INC_BA(h3270.buffer_addr);
1820 1819 }
1821 1820 #endif /*]*/
... ... @@ -1864,8 +1863,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1864 1863 * Write SSCP-LU data, which is quite a bit dumber than regular 3270
1865 1864 * output.
1866 1865 */
1867   -void
1868   -ctlr_write_sscp_lu(unsigned char buf[], int buflen)
  1866 +void ctlr_write_sscp_lu(H3270 *hSession, unsigned char buf[], int buflen)
1869 1867 {
1870 1868 int i;
1871 1869 unsigned char *cp = buf;
... ... @@ -1888,14 +1886,15 @@ ctlr_write_sscp_lu(unsigned char buf[], int buflen)
1888 1886 * Insert NULLs to the end of the line and advance to
1889 1887 * the beginning of the next line.
1890 1888 */
1891   - s_row = h3270.buffer_addr / h3270.cols;
1892   - while ((h3270.buffer_addr / h3270.cols) == s_row) {
1893   - ctlr_add(h3270.buffer_addr, EBC_null, h3270.default_cs);
1894   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
1895   - ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
1896   - ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1897   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1898   - INC_BA(h3270.buffer_addr);
  1889 + s_row = hSession->buffer_addr / hSession->cols;
  1890 + while ((hSession->buffer_addr / hSession->cols) == s_row)
  1891 + {
  1892 + ctlr_add(hSession,hSession->buffer_addr, EBC_null, hSession->default_cs);
  1893 + ctlr_add_fg(hSession,hSession->buffer_addr, hSession->default_fg);
  1894 + ctlr_add_bg(hSession,hSession->buffer_addr, hSession->default_bg);
  1895 + ctlr_add_gr(hSession,hSession->buffer_addr, hSession->default_gr);
  1896 + ctlr_add_ic(hSession,hSession->buffer_addr, hSession->default_ic);
  1897 + INC_BA(hSession->buffer_addr);
1899 1898 }
1900 1899 break;
1901 1900  
... ... @@ -1903,21 +1902,22 @@ ctlr_write_sscp_lu(unsigned char buf[], int buflen)
1903 1902 /* Some hosts forget they're talking SSCP-LU. */
1904 1903 cp++;
1905 1904 i++;
1906   - trace_ds(" StartField%s %s [translated to space]\n",rcba(&h3270,h3270.buffer_addr), see_attr(*cp));
1907   - ctlr_add(h3270.buffer_addr, EBC_space, h3270.default_cs);
1908   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
1909   - ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
1910   - ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1911   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1912   - INC_BA(h3270.buffer_addr);
  1905 + trace_ds(" StartField%s %s [translated to space]\n",rcba(hSession,hSession->buffer_addr), see_attr(*cp));
  1906 + ctlr_add(hSession,hSession->buffer_addr, EBC_space, hSession->default_cs);
  1907 + ctlr_add_fg(hSession,hSession->buffer_addr, hSession->default_fg);
  1908 + ctlr_add_bg(hSession,hSession->buffer_addr, hSession->default_bg);
  1909 + ctlr_add_gr(hSession,hSession->buffer_addr, hSession->default_gr);
  1910 + ctlr_add_ic(hSession,hSession->buffer_addr, hSession->default_ic);
  1911 + INC_BA(hSession->buffer_addr);
1913 1912 break;
  1913 +
1914 1914 case ORDER_IC:
1915   - trace_ds(" InsertCursor%s [ignored]\n",
1916   - rcba(&h3270,h3270.buffer_addr));
  1915 + trace_ds(" InsertCursor%s [ignored]\n",rcba(hSession,hSession->buffer_addr));
1917 1916 break;
  1917 +
1918 1918 case ORDER_SBA:
1919 1919 // baddr = DECODE_BADDR(*(cp+1), *(cp+2));
1920   - trace_ds(" SetBufferAddress%s [ignored]\n", rcba(&h3270,DECODE_BADDR(*(cp+1), *(cp+2))));
  1920 + trace_ds(" SetBufferAddress%s [ignored]\n", rcba(hSession,DECODE_BADDR(*(cp+1), *(cp+2))));
1921 1921 cp += 2;
1922 1922 i += 2;
1923 1923 break;
... ... @@ -1926,34 +1926,36 @@ ctlr_write_sscp_lu(unsigned char buf[], int buflen)
1926 1926 cp++;
1927 1927 if (++i >= buflen)
1928 1928 break;
  1929 +
1929 1930 if (*cp <= 0x40)
1930 1931 c = EBC_space;
1931 1932 else
1932 1933 c = *cp;
1933   - ctlr_add(h3270.buffer_addr, c, CS_GE);
1934   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
1935   - ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
1936   - ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1937   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1938   - INC_BA(h3270.buffer_addr);
  1934 +
  1935 + ctlr_add(hSession,hSession->buffer_addr, c, CS_GE);
  1936 + ctlr_add_fg(hSession,hSession->buffer_addr, hSession->default_fg);
  1937 + ctlr_add_bg(hSession,hSession->buffer_addr, hSession->default_bg);
  1938 + ctlr_add_gr(hSession,hSession->buffer_addr, hSession->default_gr);
  1939 + ctlr_add_ic(hSession,hSession->buffer_addr, hSession->default_ic);
  1940 + INC_BA(hSession->buffer_addr);
1939 1941 break;
1940 1942  
1941 1943 default:
1942   - ctlr_add(h3270.buffer_addr, *cp, h3270.default_cs);
1943   - ctlr_add_fg(h3270.buffer_addr, h3270.default_fg);
1944   - ctlr_add_bg(h3270.buffer_addr, h3270.default_bg);
1945   - ctlr_add_gr(h3270.buffer_addr, h3270.default_gr);
1946   - ctlr_add_ic(h3270.buffer_addr, h3270.default_ic);
1947   - INC_BA(h3270.buffer_addr);
  1944 + ctlr_add(hSession,hSession->buffer_addr, *cp, hSession->default_cs);
  1945 + ctlr_add_fg(hSession,hSession->buffer_addr, hSession->default_fg);
  1946 + ctlr_add_bg(hSession,hSession->buffer_addr, hSession->default_bg);
  1947 + ctlr_add_gr(hSession,hSession->buffer_addr, hSession->default_gr);
  1948 + ctlr_add_ic(hSession,hSession->buffer_addr, hSession->default_ic);
  1949 + INC_BA(hSession->buffer_addr);
1948 1950 break;
1949 1951 }
1950 1952 }
1951   - cursor_move(&h3270,h3270.buffer_addr);
1952   - h3270.sscp_start = h3270.buffer_addr;
  1953 + cursor_move(hSession,hSession->buffer_addr);
  1954 + hSession->sscp_start = hSession->buffer_addr;
1953 1955  
1954 1956 /* Unlock the keyboard. */
1955   - h3270.aid = AID_NO;
1956   - do_reset(&h3270,False);
  1957 + hSession->aid = AID_NO;
  1958 + do_reset(hSession,False);
1957 1959  
1958 1960 }
1959 1961  
... ... @@ -2263,16 +2265,16 @@ ps_process(void)
2263 2265 /*
2264 2266 * Tell me if there is any data on the screen.
2265 2267 */
2266   -Boolean
2267   -ctlr_any_data(void)
  2268 +int ctlr_any_data(H3270 *session)
2268 2269 {
2269 2270 register int i;
2270 2271  
2271   - for (i = 0; i < h3270.rows*h3270.cols; i++) {
2272   - if (!IsBlank(h3270.ea_buf[i].cc))
2273   - return True;
  2272 + for(i = 0; i < session->rows*session->cols; i++)
  2273 + {
  2274 + if (!IsBlank(session->ea_buf[i].cc))
  2275 + return 1;
2274 2276 }
2275   - return False;
  2277 + return 0;
2276 2278 }
2277 2279  
2278 2280 /*
... ... @@ -2283,7 +2285,7 @@ void
2283 2285 ctlr_clear(H3270 *session, Boolean can_snap)
2284 2286 {
2285 2287 /* Snap any data that is about to be lost into the trace file. */
2286   - if (ctlr_any_data()) {
  2288 + if (ctlr_any_data(session)) {
2287 2289 #if defined(X3270_TRACE) /*[*/
2288 2290 if (can_snap && !trace_skipping && lib3270_get_toggle(session,LIB3270_TOGGLE_SCREEN_TRACE))
2289 2291 trace_screen(session);
... ... @@ -2337,124 +2339,122 @@ static void ctlr_blanks(H3270 *session)
2337 2339 * Change a character in the 3270 buffer.
2338 2340 * Removes any field attribute defined at that location.
2339 2341 */
2340   -void ctlr_add(int baddr, unsigned char c, unsigned char cs)
  2342 +void ctlr_add(H3270 *hSession, int baddr, unsigned char c, unsigned char cs)
2341 2343 {
2342 2344 unsigned char oc = 0;
2343 2345  
2344   - if(h3270.ea_buf[baddr].fa || ((oc = h3270.ea_buf[baddr].cc) != c || h3270.ea_buf[baddr].cs != cs))
  2346 + if(hSession->ea_buf[baddr].fa || ((oc = hSession->ea_buf[baddr].cc) != c || hSession->ea_buf[baddr].cs != cs))
2345 2347 {
2346   - if (h3270.trace_primed && !IsBlank(oc))
  2348 + if (hSession->trace_primed && !IsBlank(oc))
2347 2349 {
2348 2350 #if defined(X3270_TRACE) /*[*/
2349   - if (lib3270_get_toggle(&h3270,LIB3270_TOGGLE_SCREEN_TRACE))
2350   - trace_screen(&h3270);
  2351 + if (lib3270_get_toggle(hSession,LIB3270_TOGGLE_SCREEN_TRACE))
  2352 + trace_screen(hSession);
2351 2353 #endif /*]*/
2352   - h3270.trace_primed = 0;
  2354 + hSession->trace_primed = 0;
2353 2355 }
2354 2356  
2355   - h3270.ea_buf[baddr].cc = c;
2356   - h3270.ea_buf[baddr].cs = cs;
2357   - h3270.ea_buf[baddr].fa = 0;
2358   - ONE_CHANGED(&h3270,baddr);
  2357 + hSession->ea_buf[baddr].cc = c;
  2358 + hSession->ea_buf[baddr].cs = cs;
  2359 + hSession->ea_buf[baddr].fa = 0;
  2360 + ONE_CHANGED(hSession,baddr);
2359 2361 }
2360 2362 }
2361 2363  
2362 2364 /*
2363 2365 * Set a field attribute in the 3270 buffer.
2364 2366 */
2365   -void
2366   -ctlr_add_fa(int baddr, unsigned char fa, unsigned char cs)
  2367 +void ctlr_add_fa(H3270 *hSession, int baddr, unsigned char fa, unsigned char cs)
2367 2368 {
2368 2369 /* Put a null in the display buffer. */
2369   - ctlr_add(baddr, EBC_null, cs);
  2370 + ctlr_add(hSession, baddr, EBC_null, cs);
2370 2371  
2371 2372 /*
2372 2373 * Store the new attribute, setting the 'printable' bits so that the
2373 2374 * value will be non-zero.
2374 2375 */
2375   - h3270.ea_buf[baddr].fa = FA_PRINTABLE | (fa & FA_MASK);
  2376 + hSession->ea_buf[baddr].fa = FA_PRINTABLE | (fa & FA_MASK);
2376 2377 }
2377 2378  
2378 2379 /*
2379 2380 * Change the character set for a field in the 3270 buffer.
2380 2381 */
2381 2382 void
2382   -ctlr_add_cs(int baddr, unsigned char cs)
  2383 +ctlr_add_cs(H3270 *hSession, int baddr, unsigned char cs)
2383 2384 {
2384   - if (h3270.ea_buf[baddr].cs != cs)
  2385 + if (hSession->ea_buf[baddr].cs != cs)
2385 2386 {
2386 2387 /*
2387 2388 if (SELECTED(baddr))
2388 2389 unselect(baddr, 1);
2389 2390 */
2390   - h3270.ea_buf[baddr].cs = cs;
2391   - ONE_CHANGED(&h3270,baddr);
  2391 + hSession->ea_buf[baddr].cs = cs;
  2392 + ONE_CHANGED(hSession,baddr);
2392 2393 }
2393 2394 }
2394 2395  
2395 2396 /*
2396 2397 * Change the graphic rendition of a character in the 3270 buffer.
2397 2398 */
2398   -void
2399   -ctlr_add_gr(int baddr, unsigned char gr)
  2399 +void ctlr_add_gr(H3270 *hSession, int baddr, unsigned char gr)
2400 2400 {
2401   - if (h3270.ea_buf[baddr].gr != gr)
  2401 + if (hSession->ea_buf[baddr].gr != gr)
2402 2402 {
2403   - h3270.ea_buf[baddr].gr = gr;
2404   - if (gr & GR_BLINK)
2405   - blink_start();
2406   - ONE_CHANGED(&h3270,baddr);
  2403 + hSession->ea_buf[baddr].gr = gr;
  2404 +// if (gr & GR_BLINK)
  2405 +// blink_start();
  2406 + ONE_CHANGED(hSession,baddr);
2407 2407 }
2408 2408 }
2409 2409  
2410 2410 /*
2411 2411 * Change the foreground color for a character in the 3270 buffer.
2412 2412 */
2413   -void
2414   -ctlr_add_fg(int baddr, unsigned char color)
  2413 +void ctlr_add_fg(H3270 *hSession, int baddr, unsigned char color)
2415 2414 {
2416   - if (!h3270.m3279)
  2415 + if (!hSession->m3279)
2417 2416 return;
  2417 +
2418 2418 if ((color & 0xf0) != 0xf0)
2419 2419 color = 0;
2420   - if (h3270.ea_buf[baddr].fg != color)
  2420 +
  2421 + if (hSession->ea_buf[baddr].fg != color)
2421 2422 {
2422   - h3270.ea_buf[baddr].fg = color;
2423   - ONE_CHANGED(&h3270,baddr);
  2423 + hSession->ea_buf[baddr].fg = color;
  2424 + ONE_CHANGED(hSession,baddr);
2424 2425 }
2425 2426 }
2426 2427  
2427 2428 /*
2428 2429 * Change the background color for a character in the 3270 buffer.
2429 2430 */
2430   -void
2431   -ctlr_add_bg(int baddr, unsigned char color)
  2431 +void ctlr_add_bg(H3270 *hSession, int baddr, unsigned char color)
2432 2432 {
2433   - if (!h3270.m3279)
  2433 + if (!hSession->m3279)
2434 2434 return;
  2435 +
2435 2436 if ((color & 0xf0) != 0xf0)
2436 2437 color = 0;
2437   - if (h3270.ea_buf[baddr].bg != color)
  2438 +
  2439 + if (hSession->ea_buf[baddr].bg != color)
2438 2440 {
2439   - h3270.ea_buf[baddr].bg = color;
2440   - ONE_CHANGED(&h3270,baddr);
  2441 + hSession->ea_buf[baddr].bg = color;
  2442 + ONE_CHANGED(hSession,baddr);
2441 2443 }
2442 2444 }
2443 2445  
2444 2446 /*
2445 2447 * Change the input control bit for a character in the 3270 buffer.
2446 2448 */
2447   -static void
2448   -ctlr_add_ic(int baddr, unsigned char ic)
  2449 +static void ctlr_add_ic(H3270 *hSession, int baddr, unsigned char ic)
2449 2450 {
2450   - h3270.ea_buf[baddr].ic = ic;
  2451 + hSession->ea_buf[baddr].ic = ic;
2451 2452 }
2452 2453  
2453 2454 /*
2454 2455 * Wrapping bersion of ctlr_bcopy.
2455 2456 */
2456   -void
2457   -ctlr_wrapping_memmove(int baddr_to, int baddr_from, int count)
  2457 +void ctlr_wrapping_memmove(H3270 *hSession, int baddr_to, int baddr_from, int count)
2458 2458 {
2459 2459 /*
2460 2460 * The 'to' region, the 'from' region, or both can wrap the screen,
... ... @@ -2464,8 +2464,8 @@ ctlr_wrapping_memmove(int baddr_to, int baddr_from, int count)
2464 2464 * It's faster to figure out if none of this is true, then do a slow
2465 2465 * location-at-a-time version only if it happens.
2466 2466 */
2467   - if (baddr_from + count <= h3270.rows*h3270.cols &&
2468   - baddr_to + count <= h3270.rows*h3270.cols) {
  2467 + if (baddr_from + count <= hSession->rows*hSession->cols &&
  2468 + baddr_to + count <= hSession->rows*hSession->cols) {
2469 2469 ctlr_bcopy(baddr_from, baddr_to, count, True);
2470 2470 } else {
2471 2471 int i, from, to;
... ... @@ -2473,12 +2473,12 @@ ctlr_wrapping_memmove(int baddr_to, int baddr_from, int count)
2473 2473 for (i = 0; i < count; i++) {
2474 2474 if (baddr_to > baddr_from) {
2475 2475 /* Shifting right, move left. */
2476   - to = (baddr_to + count - 1 - i) % h3270.rows*h3270.cols;
2477   - from = (baddr_from + count - 1 - i) % h3270.rows*h3270.cols;
  2476 + to = (baddr_to + count - 1 - i) % hSession->rows*hSession->cols;
  2477 + from = (baddr_from + count - 1 - i) % hSession->rows*hSession->cols;
2478 2478 } else {
2479 2479 /* Shifting left, move right. */
2480   - to = (baddr_to + i) % h3270.rows*h3270.cols;
2481   - from = (baddr_from + i) % h3270.rows*h3270.cols;
  2480 + to = (baddr_to + i) % hSession->rows*hSession->cols;
  2481 + from = (baddr_from + i) % hSession->rows*hSession->cols;
2482 2482 }
2483 2483 ctlr_bcopy(from, to, 1, True);
2484 2484 }
... ... @@ -2509,13 +2509,13 @@ ctlr_bcopy(int baddr_from, int baddr_to, int count, int move_ea)
2509 2509 * Erase a region of the 3270 buffer, optionally clearing extended attributes
2510 2510 * as well.
2511 2511 */
2512   -void ctlr_aclear(int baddr, int count, int clear_ea)
  2512 +void ctlr_aclear(H3270 *session, int baddr, int count, int clear_ea)
2513 2513 {
2514   - if (memcmp((char *) &h3270.ea_buf[baddr], (char *) h3270.zero_buf,
  2514 + if (memcmp((char *) &session->ea_buf[baddr], (char *) session->zero_buf,
2515 2515 count * sizeof(struct ea))) {
2516   - (void) memset((char *) &h3270.ea_buf[baddr], 0,
  2516 + (void) memset((char *) &session->ea_buf[baddr], 0,
2517 2517 count * sizeof(struct ea));
2518   - REGION_CHANGED(&h3270,baddr, baddr + count);
  2518 + REGION_CHANGED(session,baddr, baddr + count);
2519 2519 }
2520 2520 /* XXX: What about clear_ea? */
2521 2521 }
... ... @@ -2591,7 +2591,7 @@ void ctlr_altbuffer(H3270 *session, int alt)
2591 2591 * There may be blinkers on the alternate screen; schedule one
2592 2592 * iteration just in case.
2593 2593 */
2594   - blink_start();
  2594 +// blink_start();
2595 2595 }
2596 2596 }
2597 2597  
... ... @@ -2628,9 +2628,8 @@ mdt_clear(int baddr)
2628 2628  
2629 2629 /*
2630 2630 * Support for screen-size swapping for scrolling
2631   - */
2632   -void
2633   -ctlr_shrink(void)
  2631 + */ /*
  2632 +void ctlr_shrink(void)
2634 2633 {
2635 2634 int baddr;
2636 2635  
... ... @@ -2642,6 +2641,7 @@ ctlr_shrink(void)
2642 2641 ALL_CHANGED(&h3270);
2643 2642 h3270.display(&h3270);
2644 2643 }
  2644 +*/
2645 2645  
2646 2646 #if defined(X3270_DBCS) /*[*/
2647 2647 /*
... ... @@ -2754,11 +2754,3 @@ static void ticking_stop(H3270 *session)
2754 2754 status_timing(session,&t_start, &t1);
2755 2755 }
2756 2756 }
2757   -
2758   -/*
2759   - * No-op toggle.
2760   - */
2761   -void toggle_nop(H3270 *session, struct lib3270_toggle *t unused, LIB3270_TOGGLE_TYPE tt unused)
2762   -{
2763   -}
2764   -
... ...
ctlrc.h
1 1 /*
2   - * Copyright 1995, 1999, 2000, 2002, 2003, 2005 by Paul Mattes.
3   - * Permission to use, copy, modify, and distribute this software and its
4   - * documentation for any purpose and without fee is hereby granted,
5   - * provided that the above copyright notice appear in all copies and that
6   - * both that copyright notice and this permission notice appear in
7   - * supporting documentation.
  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., 59 Temple
  19 + * Place, Suite 330, Boston, MA, 02111-1307, USA
  20 + *
  21 + * Este programa está nomeado como ctlrc.h 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)
8 27 *
9   - * x3270, c3270, s3270 and tcl3270 are distributed in the hope that they will
10   - * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
11   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the file LICENSE
12   - * for more details.
13 28 */
14 29  
15 30 /*
... ... @@ -24,30 +39,30 @@ enum pds {
24 39 PDS_BAD_ADDR = -2 /* command contained a bad address */
25 40 };
26 41  
27   -LIB3270_INTERNAL void ctlr_aclear(int baddr, int count, int clear_ea);
28   -LIB3270_INTERNAL void ctlr_add(int baddr, unsigned char c, unsigned char cs);
29   -LIB3270_INTERNAL void ctlr_add_bg(int baddr, unsigned char color);
30   -LIB3270_INTERNAL void ctlr_add_cs(int baddr, unsigned char cs);
31   -LIB3270_INTERNAL void ctlr_add_fa(int baddr, unsigned char fa, unsigned char cs);
32   -LIB3270_INTERNAL void ctlr_add_fg(int baddr, unsigned char color);
33   -LIB3270_INTERNAL void ctlr_add_gr(int baddr, unsigned char gr);
  42 +LIB3270_INTERNAL void ctlr_aclear(H3270 *session, int baddr, int count, int clear_ea);
  43 +LIB3270_INTERNAL void ctlr_add(H3270 *hSession, int baddr, unsigned char c, unsigned char cs);
  44 +LIB3270_INTERNAL void ctlr_add_bg(H3270 *hSession, int baddr, unsigned char color);
  45 +LIB3270_INTERNAL void ctlr_add_cs(H3270 *hSession, int baddr, unsigned char cs);
  46 +LIB3270_INTERNAL void ctlr_add_fa(H3270 *hSession, int baddr, unsigned char fa, unsigned char cs);
  47 +LIB3270_INTERNAL void ctlr_add_fg(H3270 *hSession, int baddr, unsigned char color);
  48 +LIB3270_INTERNAL void ctlr_add_gr(H3270 *hSession, int baddr, unsigned char gr);
34 49 LIB3270_INTERNAL void ctlr_altbuffer(H3270 *session, int alt);
35   -LIB3270_INTERNAL Boolean ctlr_any_data(void);
  50 +LIB3270_INTERNAL int ctlr_any_data(H3270 *session);
36 51 LIB3270_INTERNAL void ctlr_bcopy(int baddr_from, int baddr_to, int count, int move_ea);
37 52 // LIB3270_INTERNAL void ctlr_changed(int bstart, int bend);
38 53 LIB3270_INTERNAL void ctlr_clear(H3270 *session, Boolean can_snap);
39   -LIB3270_INTERNAL void ctlr_erase_all_unprotected(void);
  54 +LIB3270_INTERNAL void ctlr_erase_all_unprotected(H3270 *hSession);
40 55 LIB3270_INTERNAL void ctlr_init(H3270 *session, unsigned cmask);
41 56 LIB3270_INTERNAL void ctlr_read_buffer(unsigned char aid_byte);
42 57 LIB3270_INTERNAL void ctlr_read_modified(unsigned char aid_byte, Boolean all);
43 58 LIB3270_INTERNAL void ctlr_reinit(H3270 *session, unsigned cmask);
44 59 LIB3270_INTERNAL void ctlr_scroll(H3270 *hSession);
45   -LIB3270_INTERNAL void ctlr_shrink(void);
46   -LIB3270_INTERNAL void ctlr_snap_buffer(void);
47   -LIB3270_INTERNAL Boolean ctlr_snap_modes(void);
48   -LIB3270_INTERNAL void ctlr_wrapping_memmove(int baddr_to, int baddr_from, int count);
  60 +// LIB3270_INTERNAL void ctlr_shrink(void);
  61 +// LIB3270_INTERNAL void ctlr_snap_buffer(void);
  62 +// LIB3270_INTERNAL Boolean ctlr_snap_modes(void);
  63 +LIB3270_INTERNAL void ctlr_wrapping_memmove(H3270 *session, int baddr_to, int baddr_from, int count);
49 64 LIB3270_INTERNAL enum pds ctlr_write(unsigned char buf[], int buflen, Boolean erase);
50   -LIB3270_INTERNAL void ctlr_write_sscp_lu(unsigned char buf[], int buflen);
  65 +LIB3270_INTERNAL void ctlr_write_sscp_lu(H3270 *session, unsigned char buf[], int buflen);
51 66 LIB3270_INTERNAL struct ea *fa2ea(int baddr);
52 67  
53 68 LIB3270_INTERNAL Boolean get_bounded_field_attribute(register int baddr, register int bound, unsigned char *fa_out);
... ... @@ -62,8 +77,8 @@ LIB3270_INTERNAL void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ov
62 77 LIB3270_INTERNAL void ctlr_erase(H3270 *session, int alt);
63 78  
64 79 LIB3270_INTERNAL void ticking_start(H3270 *session, Boolean anyway);
65   -LIB3270_INTERNAL void toggle_nop(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt);
66   -LIB3270_INTERNAL void toggle_showTiming(struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt);
  80 +// LIB3270_INTERNAL void toggle_nop(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt);
  81 +// LIB3270_INTERNAL void toggle_showTiming(struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt);
67 82  
68 83 enum dbcs_state {
69 84 DBCS_NONE = 0, /* position is not DBCS */
... ...
ft_cut.c
... ... @@ -392,7 +392,7 @@ cut_data_request(void)
392 392 /* Copy data into the screen buffer. */
393 393 count = 0;
394 394 while (count < O_UP_MAX && (c = xlate_getc()) != EOF) {
395   - ctlr_add(O_UP_DATA + count, c, 0);
  395 + ctlr_add(&h3270,O_UP_DATA + count, c, 0);
396 396 count++;
397 397 }
398 398  
... ... @@ -402,7 +402,7 @@ cut_data_request(void)
402 402  
403 403 /* Clean out any data we may have written. */
404 404 for (j = 0; j < count; j++)
405   - ctlr_add(O_UP_DATA + j, 0, 0);
  405 + ctlr_add(&h3270,O_UP_DATA + j, 0, 0);
406 406  
407 407 /* Abort the transfer. */
408 408 cut_abort(SC_ABORT_FILE,_( "Error \"%s\" reading from local file (rc=%d)" ), strerror(errno), errno);
... ... @@ -411,24 +411,24 @@ cut_data_request(void)
411 411  
412 412 /* Send special data for EOF. */
413 413 if (!count && feof(((H3270FT *) h3270.ft)->local_file)) {
414   - ctlr_add(O_UP_DATA, EOF_DATA1, 0);
415   - ctlr_add(O_UP_DATA+1, EOF_DATA2, 0);
  414 + ctlr_add(&h3270,O_UP_DATA, EOF_DATA1, 0);
  415 + ctlr_add(&h3270,O_UP_DATA+1, EOF_DATA2, 0);
416 416 count = 2;
417 417 }
418 418  
419 419 /* Compute the other fields. */
420   - ctlr_add(O_UP_FRAME_SEQ, seq, 0);
  420 + ctlr_add(&h3270,O_UP_FRAME_SEQ, seq, 0);
421 421 cs = 0;
422 422 for (i = 0; i < count; i++)
423 423 cs ^= h3270.ea_buf[O_UP_DATA + i].cc;
424   - ctlr_add(O_UP_CSUM, asc2ebc[(int)table6[cs & 0x3f]], 0);
425   - ctlr_add(O_UP_LEN, asc2ebc[(int)table6[(count >> 6) & 0x3f]], 0);
426   - ctlr_add(O_UP_LEN+1, asc2ebc[(int)table6[count & 0x3f]], 0);
  424 + ctlr_add(&h3270,O_UP_CSUM, asc2ebc[(int)table6[cs & 0x3f]], 0);
  425 + ctlr_add(&h3270,O_UP_LEN, asc2ebc[(int)table6[(count >> 6) & 0x3f]], 0);
  426 + ctlr_add(&h3270,O_UP_LEN+1, asc2ebc[(int)table6[count & 0x3f]], 0);
427 427  
428 428 /* XXX: Change the data field attribute so it doesn't display. */
429 429 attr = h3270.ea_buf[O_DR_SF].fa;
430 430 attr = (attr & ~FA_INTENSITY) | FA_INT_ZERO_NSEL;
431   - ctlr_add_fa(O_DR_SF, attr, 0);
  431 + ctlr_add_fa(&h3270,O_DR_SF, attr, 0);
432 432  
433 433 /* Send it up to the host. */
434 434 trace_ds("> FT DATA %u\n", from6(seq));
... ... @@ -535,10 +535,10 @@ static void cut_abort(unsigned short reason, const char *fmt, ...)
535 535 va_end(args);
536 536  
537 537 /* Send the abort sequence. */
538   - ctlr_add(RO_FRAME_TYPE, RFT_CONTROL_CODE, 0);
539   - ctlr_add(RO_FRAME_SEQ, h3270.ea_buf[O_DT_FRAME_SEQ].cc, 0);
540   - ctlr_add(RO_REASON_CODE, HIGH8(reason), 0);
541   - ctlr_add(RO_REASON_CODE+1, LOW8(reason), 0);
  538 + ctlr_add(&h3270,RO_FRAME_TYPE, RFT_CONTROL_CODE, 0);
  539 + ctlr_add(&h3270,RO_FRAME_SEQ, h3270.ea_buf[O_DT_FRAME_SEQ].cc, 0);
  540 + ctlr_add(&h3270,RO_REASON_CODE, HIGH8(reason), 0);
  541 + ctlr_add(&h3270,RO_REASON_CODE+1, LOW8(reason), 0);
542 542 trace_ds("> FT CONTROL_CODE ABORT\n");
543 543  
544 544 lib3270_pfkey(&h3270,2);
... ...
kybd.c
... ... @@ -718,7 +718,7 @@ static Boolean ins_prep(int faddr, int baddr, int count)
718 718 first_null);
719 719 #endif /*]*/
720 720 if (copy_len)
721   - ctlr_wrapping_memmove(to, baddr, copy_len);
  721 + ctlr_wrapping_memmove(&h3270,to, baddr, copy_len);
722 722 }
723 723 INC_BA(xaddr);
724 724 }
... ... @@ -824,17 +824,17 @@ static Boolean key_Character(int code, Boolean with_ge, Boolean pasting, Boolean
824 824 xaddr = baddr;
825 825 INC_BA(xaddr);
826 826 was_si = (h3270.ea_buf[xaddr].cc == EBC_si);
827   - ctlr_add(xaddr, EBC_space, CS_BASE);
828   - ctlr_add_fg(xaddr, 0);
  827 + ctlr_add(&h3270,xaddr, EBC_space, CS_BASE);
  828 + ctlr_add_fg(&h3270,xaddr, 0);
829 829 #if defined(X3270_ANSI) /*[*/
830   - ctlr_add_bg(xaddr, 0);
  830 + ctlr_add_bg(&h3270,xaddr, 0);
831 831 #endif /*]*/
832 832 if (!was_si) {
833 833 INC_BA(xaddr);
834   - ctlr_add(xaddr, EBC_so, CS_BASE);
835   - ctlr_add_fg(xaddr, 0);
  834 + ctlr_add(&h3270,xaddr, EBC_so, CS_BASE);
  835 + ctlr_add_fg(&h3270,xaddr, 0);
836 836 #if defined(X3270_ANSI) /*[*/
837   - ctlr_add_bg(xaddr, 0);
  837 + ctlr_add_bg(&h3270,xaddr, 0);
838 838 #endif /*]*/
839 839 }
840 840 }
... ... @@ -855,9 +855,9 @@ static Boolean key_Character(int code, Boolean with_ge, Boolean pasting, Boolean
855 855 */
856 856 xaddr = baddr;
857 857 INC_BA(xaddr);
858   - ctlr_add(xaddr, EBC_space, CS_BASE);
859   - ctlr_add_fg(xaddr, 0);
860   - ctlr_add_gr(xaddr, 0);
  858 + ctlr_add(&h3270,xaddr, EBC_space, CS_BASE);
  859 + ctlr_add_fg(&h3270,xaddr, 0);
  860 + ctlr_add_gr(&h3270,xaddr, 0);
861 861 }
862 862 } else {
863 863 Boolean was_si;
... ... @@ -882,37 +882,34 @@ static Boolean key_Character(int code, Boolean with_ge, Boolean pasting, Boolean
882 882 if (!ins_prep(faddr, baddr, 3))
883 883 return False;
884 884 xaddr = baddr;
885   - ctlr_add(xaddr, EBC_si,
886   - CS_BASE);
887   - ctlr_add_fg(xaddr, 0);
888   - ctlr_add_gr(xaddr, 0);
  885 + ctlr_add(&h3270,xaddr, EBC_si,CS_BASE);
  886 + ctlr_add_fg(&h3270,xaddr, 0);
  887 + ctlr_add_gr(&h3270,xaddr, 0);
889 888 INC_BA(xaddr);
890 889 INC_BA(baddr);
891 890 INC_BA(xaddr);
892   - ctlr_add(xaddr, EBC_so,
893   - CS_BASE);
894   - ctlr_add_fg(xaddr, 0);
895   - ctlr_add_gr(xaddr, 0);
  891 + ctlr_add(&h3270,xaddr, EBC_so,CS_BASE);
  892 + ctlr_add_fg(&h3270,xaddr, 0);
  893 + ctlr_add_gr(&h3270,xaddr, 0);
896 894 }
897 895 } else {
898 896 /* Overwriting part of a subfield. */
899 897 xaddr = baddr;
900   - ctlr_add(xaddr, EBC_si, CS_BASE);
901   - ctlr_add_fg(xaddr, 0);
902   - ctlr_add_gr(xaddr, 0);
  898 + ctlr_add(&h3270,xaddr, EBC_si, CS_BASE);
  899 + ctlr_add_fg(&h3270,xaddr, 0);
  900 + ctlr_add_gr(&h3270,xaddr, 0);
903 901 INC_BA(xaddr);
904 902 INC_BA(baddr);
905 903 INC_BA(xaddr);
906 904 was_si = (h3270.ea_buf[xaddr].cc == EBC_si);
907   - ctlr_add(xaddr, EBC_space, CS_BASE);
908   - ctlr_add_fg(xaddr, 0);
909   - ctlr_add_gr(xaddr, 0);
  905 + ctlr_add(&h3270,xaddr, EBC_space, CS_BASE);
  906 + ctlr_add_fg(&h3270,xaddr, 0);
  907 + ctlr_add_gr(&h3270,xaddr, 0);
910 908 if (!was_si) {
911 909 INC_BA(xaddr);
912   - ctlr_add(xaddr, EBC_so,
913   - CS_BASE);
914   - ctlr_add_fg(xaddr, 0);
915   - ctlr_add_gr(xaddr, 0);
  910 + ctlr_add(&h3270,xaddr, EBC_so,CS_BASE);
  911 + ctlr_add_fg(&h3270,xaddr, 0);
  912 + ctlr_add_gr(&h3270,xaddr, 0);
916 913 }
917 914 }
918 915 }
... ... @@ -923,9 +920,9 @@ static Boolean key_Character(int code, Boolean with_ge, Boolean pasting, Boolean
923 920 return False;
924 921 break;
925 922 }
926   - ctlr_add(baddr, (unsigned char)code,(unsigned char)(with_ge ? CS_GE : 0));
927   - ctlr_add_fg(baddr, 0);
928   - ctlr_add_gr(baddr, 0);
  923 + ctlr_add(&h3270,baddr, (unsigned char)code,(unsigned char)(with_ge ? CS_GE : 0));
  924 + ctlr_add_fg(&h3270,baddr, 0);
  925 + ctlr_add_gr(&h3270,baddr, 0);
929 926 INC_BA(baddr);
930 927  
931 928 /* Replace leading nulls with blanks, if desired. */
... ... @@ -958,7 +955,7 @@ static Boolean key_Character(int code, Boolean with_ge, Boolean pasting, Boolean
958 955 }
959 956  
960 957 if (h3270.ea_buf[baddr_fill].cc == EBC_null)
961   - ctlr_add(baddr_fill, EBC_space, 0);
  958 + ctlr_add(&h3270,baddr_fill, EBC_space, 0);
962 959 DEC_BA(baddr_fill);
963 960 }
964 961 }
... ... @@ -1693,7 +1690,7 @@ do_delete(void)
1693 1690  
1694 1691 /* NULL fill at the end. */
1695 1692 for (i = 0; i < ndel; i++)
1696   - ctlr_add(end_baddr - i, EBC_null, 0);
  1693 + ctlr_add(&h3270,end_baddr - i, EBC_null, 0);
1697 1694  
1698 1695 /* Set the MDT for this field. */
1699 1696 mdt_set(h3270.cursor_addr);
... ... @@ -2431,7 +2428,7 @@ LIB3270_ACTION( eraseeol )
2431 2428 /* erase to next field attribute or current line */
2432 2429 do
2433 2430 {
2434   - ctlr_add(baddr, EBC_null, 0);
  2431 + ctlr_add(&h3270,baddr, EBC_null, 0);
2435 2432 INC_BA(baddr);
2436 2433 } while (!h3270.ea_buf[baddr].fa && BA_TO_COL(baddr) > 0);
2437 2434  
... ... @@ -2442,7 +2439,7 @@ LIB3270_ACTION( eraseeol )
2442 2439 /* erase to end of current line */
2443 2440 do
2444 2441 {
2445   - ctlr_add(baddr, EBC_null, 0);
  2442 + ctlr_add(&h3270,baddr, EBC_null, 0);
2446 2443 INC_BA(baddr);
2447 2444 } while(baddr != 0 && BA_TO_COL(baddr) > 0);
2448 2445 }
... ... @@ -2491,13 +2488,13 @@ LIB3270_ACTION( eraseeof )
2491 2488 }
2492 2489 if (hSession->formatted) { /* erase to next field attribute */
2493 2490 do {
2494   - ctlr_add(baddr, EBC_null, 0);
  2491 + ctlr_add(&h3270,baddr, EBC_null, 0);
2495 2492 INC_BA(baddr);
2496 2493 } while (!h3270.ea_buf[baddr].fa);
2497 2494 mdt_set(hSession->cursor_addr);
2498 2495 } else { /* erase to end of screen */
2499 2496 do {
2500   - ctlr_add(baddr, EBC_null, 0);
  2497 + ctlr_add(&h3270,baddr, EBC_null, 0);
2501 2498 INC_BA(baddr);
2502 2499 } while (baddr != 0);
2503 2500 }
... ... @@ -2553,7 +2550,7 @@ LIB3270_ACTION( eraseinput )
2553 2550 f = True;
2554 2551 }
2555 2552 if (!hSession->ea_buf[baddr].fa) {
2556   - ctlr_add(baddr, EBC_null, 0);
  2553 + ctlr_add(&h3270,baddr, EBC_null, 0);
2557 2554 }
2558 2555 } while (!hSession->ea_buf[baddr].fa);
2559 2556 } else { /* skip protected */
... ... @@ -2680,7 +2677,7 @@ LIB3270_ACTION( deletefield )
2680 2677 mdt_set(hSession->cursor_addr);
2681 2678 cursor_move(hSession,baddr);
2682 2679 while (!hSession->ea_buf[baddr].fa) {
2683   - ctlr_add(baddr, EBC_null, 0);
  2680 + ctlr_add(hSession,baddr, EBC_null, 0);
2684 2681 INC_BA(baddr);
2685 2682 }
2686 2683 hSession->display(hSession);
... ... @@ -3304,7 +3301,7 @@ kybd_prime(void)
3304 3301  
3305 3302 /* Erase it. */
3306 3303 while (!h3270.ea_buf[baddr].fa) {
3307   - ctlr_add(baddr, 0, 0);
  3304 + ctlr_add(&h3270,baddr, 0, 0);
3308 3305 len++;
3309 3306 INC_BA(baddr);
3310 3307 }
... ...
screenc.h
... ... @@ -16,7 +16,7 @@
16 16 #define SCREENC_H_INCLUDED 1
17 17 /* c3270 version of screenc.h */
18 18  
19   -#define blink_start()
  19 +// #define blink_start()
20 20 #define display_heightMM() 100
21 21 #define display_height() 1
22 22 #define display_widthMM() 100
... ... @@ -26,32 +26,20 @@
26 26 #define screen_132() /* */
27 27 #define screen_80() /* */
28 28  
29   -// #define screen_erase(x) x->erase(x)
30   -// LIB3270_INTERNAL void screen_erase(H3270 *session);
31   -
32   -// LIB3270_INTERNAL void screen_changed(H3270 *session, int bstart, int bend);
33   -LIB3270_INTERNAL int screen_init(H3270 *session);
34   -// LIB3270_INTERNAL void screen_flip(void);
35   -// LIB3270_INTERNAL FILE *start_pager(void);
36   -LIB3270_INTERNAL Boolean screen_new_display_charsets(char *cslist, char *csname);
37   -
38   -LIB3270_INTERNAL void mcursor_set(H3270 *session,LIB3270_CURSOR m);
  29 +LIB3270_INTERNAL int screen_init(H3270 *session);
  30 +LIB3270_INTERNAL Boolean screen_new_display_charsets(char *cslist, char *csname);
  31 +LIB3270_INTERNAL void mcursor_set(H3270 *session,LIB3270_CURSOR m);
39 32  
40 33 #define mcursor_locked(x) mcursor_set(x,CURSOR_MODE_LOCKED)
41 34 #define mcursor_normal(x) mcursor_set(x,CURSOR_MODE_NORMAL)
42 35 #define mcursor_waiting(x) mcursor_set(x,CURSOR_MODE_WAITING)
43 36  
44   -
45   -//LIB3270_INTERNAL void mcursor_locked(H3270 *session);
46   -//LIB3270_INTERNAL void mcursor_normal(H3270 *session);
47   -//LIB3270_INTERNAL void mcursor_waiting(H3270 *session);
48   -
49 37 LIB3270_INTERNAL void notify_toggle_changed(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason);
50 38 LIB3270_INTERNAL void set_viewsize(H3270 *session, int rows, int cols);
51 39  
52   -LIB3270_INTERNAL Boolean escaped;
  40 +// LIB3270_INTERNAL Boolean escaped;
53 41  
54 42  
55   -LIB3270_INTERNAL void screen_title(char *text);
  43 +// LIB3270_INTERNAL void screen_title(char *text);
56 44  
57 45 #endif // SCREENC_H_INCLUDED
... ...
sf.c
... ... @@ -641,7 +641,7 @@ sf_outbound_ds(unsigned char buf[], int buflen)
641 641 break;
642 642 case SNA_CMD_EAU:
643 643 trace_ds(" EraseAllUnprotected\n");
644   - ctlr_erase_all_unprotected();
  644 + ctlr_erase_all_unprotected(&h3270);
645 645 break;
646 646 default:
647 647 trace_ds(" unknown type 0x%02x\n", buf[4]);
... ...
telnet.c
... ... @@ -1923,8 +1923,7 @@ process_eor(void)
1923 1923 return 0;
1924 1924 tn3270e_submode = E_SSCP;
1925 1925 check_in3270(&h3270);
1926   - ctlr_write_sscp_lu(h3270.ibuf + EH_SIZE,
1927   - (ibptr - h3270.ibuf) - EH_SIZE);
  1926 + ctlr_write_sscp_lu(&h3270, h3270.ibuf + EH_SIZE,(ibptr - h3270.ibuf) - EH_SIZE);
1928 1927 return 0;
1929 1928 default:
1930 1929 /* Should do something more extraordinary here. */
... ...
toggles.c
... ... @@ -145,6 +145,13 @@ static void toggle_monocase(H3270 *session, struct lib3270_toggle *t, LIB3270_TO
145 145 }
146 146  
147 147 /*
  148 + * No-op toggle.
  149 + */
  150 +static void toggle_nop(H3270 *session, struct lib3270_toggle *t unused, LIB3270_TOGGLE_TYPE tt unused)
  151 +{
  152 +}
  153 +
  154 +/*
148 155 * Called from system initialization code to handle initial toggle settings.
149 156 */
150 157 void initialize_toggles(H3270 *session)
... ...