Commit 0b280c57589410d9631cf74dae2aafdc50fb9868

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

Migrando mais funções da API para a versão multi-sessão

pw3270.cbp
... ... @@ -52,6 +52,7 @@
52 52 <Unit filename="autogen.sh" />
53 53 <Unit filename="colors.conf" />
54 54 <Unit filename="configure.ac" />
  55 + <Unit filename="pw3270.nsi.in" />
55 56 <Unit filename="pw3270.spec.in" />
56 57 <Unit filename="src/include/lib3270.h" />
57 58 <Unit filename="src/include/lib3270/3270ds.h" />
... ...
src/lib3270/ctlr.c
... ... @@ -547,7 +547,7 @@ static void insert_sa1(H3270 *hSession, unsigned char attr, unsigned char value,
547 547 if (value == *currentp)
548 548 return;
549 549 *currentp = value;
550   - space3270out(3);
  550 + space3270out(hSession,3);
551 551 *hSession->obptr++ = ORDER_SA;
552 552 *hSession->obptr++ = attr;
553 553 *hSession->obptr++ = value;
... ... @@ -633,7 +633,7 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all)
633 633 switch (aid_byte) {
634 634  
635 635 case AID_SYSREQ: /* test request */
636   - space3270out(4);
  636 + space3270out(&h3270,4);
637 637 *h3270.obptr++ = 0x01; /* soh */
638 638 *h3270.obptr++ = 0x5b; /* % */
639 639 *h3270.obptr++ = 0x61; /* / */
... ... @@ -656,7 +656,7 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all)
656 656  
657 657 default: /* ordinary AID */
658 658 if (!IN_SSCP) {
659   - space3270out(3);
  659 + space3270out(&h3270,3);
660 660 *h3270.obptr++ = aid_byte;
661 661 trace_ds("%s",see_aid(aid_byte));
662 662 if (short_read)
... ... @@ -664,7 +664,7 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all)
664 664 ENCODE_BADDR(h3270.obptr, h3270.cursor_addr);
665 665 trace_ds("%s",rcba(&h3270,h3270.cursor_addr));
666 666 } else {
667   - space3270out(1); /* just in case */
  667 + space3270out(&h3270,1); /* just in case */
668 668 }
669 669 break;
670 670 }
... ... @@ -683,7 +683,7 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all)
683 683 Boolean any = False;
684 684  
685 685 INC_BA(baddr);
686   - space3270out(3);
  686 + space3270out(&h3270,3);
687 687 *h3270.obptr++ = ORDER_SBA;
688 688 ENCODE_BADDR(h3270.obptr, baddr);
689 689 trace_ds(" SetBufferAddress%s (Cols: %d Rows: %d)", rcba(&h3270,baddr), h3270.cols, h3270.rows);
... ... @@ -693,14 +693,14 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all)
693 693 h3270.ea_buf[baddr].cc) {
694 694 insert_sa(&h3270,baddr,&current_fg,&current_bg,&current_gr,&current_cs,&any);
695 695 if (h3270.ea_buf[baddr].cs & CS_GE) {
696   - space3270out(1);
  696 + space3270out(&h3270,1);
697 697 *h3270.obptr++ = ORDER_GE;
698 698 if (any)
699 699 trace_ds("'");
700 700 trace_ds(" GraphicEscape");
701 701 any = False;
702 702 }
703   - space3270out(1);
  703 + space3270out(&h3270,1);
704 704 *h3270.obptr++ = h3270.ea_buf[baddr].cc;
705 705 if (!any)
706 706 trace_ds(" '");
... ... @@ -733,14 +733,14 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all)
733 733 if (h3270.ea_buf[baddr].cc) {
734 734 insert_sa(&h3270,baddr,&current_fg,&current_bg,&current_gr,&current_cs,&any);
735 735 if (h3270.ea_buf[baddr].cs & CS_GE) {
736   - space3270out(1);
  736 + space3270out(&h3270,1);
737 737 *h3270.obptr++ = ORDER_GE;
738 738 if (any)
739 739 trace_ds("' ");
740 740 trace_ds(" GraphicEscape ");
741 741 any = False;
742 742 }
743   - space3270out(1);
  743 + space3270out(&h3270,1);
744 744 *h3270.obptr++ = h3270.ea_buf[baddr].cc;
745 745 if (!any)
746 746 trace_ds("%s","'");
... ... @@ -763,7 +763,7 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all)
763 763  
764 764 rm_done:
765 765 trace_ds("\n");
766   - net_output();
  766 + net_output(&h3270);
767 767 }
768 768  
769 769 /*
... ... @@ -791,7 +791,7 @@ void ctlr_read_buffer(H3270 *hSession, unsigned char aid_byte)
791 791 trace_ds("> ");
792 792 hSession->obptr = hSession->obuf;
793 793  
794   - space3270out(3);
  794 + space3270out(hSession,3);
795 795 *hSession->obptr++ = aid_byte;
796 796 ENCODE_BADDR(hSession->obptr, hSession->cursor_addr);
797 797 trace_ds("%s%s", see_aid(aid_byte), rcba(hSession,hSession->cursor_addr));
... ... @@ -802,12 +802,12 @@ void ctlr_read_buffer(H3270 *hSession, unsigned char aid_byte)
802 802 {
803 803 if (hSession->reply_mode == SF_SRM_FIELD)
804 804 {
805   - space3270out(2);
  805 + space3270out(hSession,2);
806 806 *hSession->obptr++ = ORDER_SF;
807 807 }
808 808 else
809 809 {
810   - space3270out(4);
  810 + space3270out(hSession,4);
811 811 *hSession->obptr++ = ORDER_SFE;
812 812 attr_count = hSession->obptr - hSession->obuf;
813 813 *hSession->obptr++ = 1; /* for now */
... ... @@ -825,21 +825,21 @@ void ctlr_read_buffer(H3270 *hSession, unsigned char aid_byte)
825 825 if (hSession->reply_mode != SF_SRM_FIELD)
826 826 {
827 827 if (hSession->ea_buf[baddr].fg) {
828   - space3270out(2);
  828 + space3270out(hSession,2);
829 829 *hSession->obptr++ = XA_FOREGROUND;
830 830 *hSession->obptr++ = hSession->ea_buf[baddr].fg;
831 831 trace_ds("%s", see_efa(XA_FOREGROUND, hSession->ea_buf[baddr].fg));
832 832 (*(hSession->obuf + attr_count))++;
833 833 }
834 834 if (hSession->ea_buf[baddr].bg) {
835   - space3270out(2);
  835 + space3270out(hSession,2);
836 836 *hSession->obptr++ = XA_BACKGROUND;
837 837 *hSession->obptr++ = hSession->ea_buf[baddr].bg;
838 838 trace_ds("%s", see_efa(XA_BACKGROUND, hSession->ea_buf[baddr].bg));
839 839 (*(hSession->obuf + attr_count))++;
840 840 }
841 841 if (hSession->ea_buf[baddr].gr) {
842   - space3270out(2);
  842 + space3270out(hSession,2);
843 843 *hSession->obptr++ = XA_HIGHLIGHTING;
844 844 *hSession->obptr++ = hSession->ea_buf[baddr].gr | 0xf0;
845 845 trace_ds("%s", see_efa(XA_HIGHLIGHTING,
... ... @@ -847,7 +847,7 @@ void ctlr_read_buffer(H3270 *hSession, unsigned char aid_byte)
847 847 (*(hSession->obuf + attr_count))++;
848 848 }
849 849 if (hSession->ea_buf[baddr].cs & CS_MASK) {
850   - space3270out(2);
  850 + space3270out(hSession,2);
851 851 *hSession->obptr++ = XA_CHARSET;
852 852 *hSession->obptr++ = host_cs(hSession->ea_buf[baddr].cs);
853 853 trace_ds("%s", see_efa(XA_CHARSET,host_cs(hSession->ea_buf[baddr].cs)));
... ... @@ -858,14 +858,14 @@ void ctlr_read_buffer(H3270 *hSession, unsigned char aid_byte)
858 858 } else {
859 859 insert_sa(hSession,baddr,&current_fg,&current_bg,&current_gr,&current_cs,&any);
860 860 if (hSession->ea_buf[baddr].cs & CS_GE) {
861   - space3270out(1);
  861 + space3270out(hSession,1);
862 862 *hSession->obptr++ = ORDER_GE;
863 863 if (any)
864 864 trace_ds("'");
865 865 trace_ds(" GraphicEscape");
866 866 any = False;
867 867 }
868   - space3270out(1);
  868 + space3270out(hSession,1);
869 869 *hSession->obptr++ = hSession->ea_buf[baddr].cc;
870 870 if (hSession->ea_buf[baddr].cc <= 0x3f ||
871 871 hSession->ea_buf[baddr].cc == 0xff) {
... ... @@ -887,7 +887,7 @@ void ctlr_read_buffer(H3270 *hSession, unsigned char aid_byte)
887 887 trace_ds("'");
888 888  
889 889 trace_ds("\n");
890   - net_output();
  890 + net_output(hSession);
891 891 }
892 892  
893 893 #if defined(X3270_TRACE) /*[*/
... ...
src/lib3270/ft_dft.c
... ... @@ -192,12 +192,12 @@ dft_open_request(unsigned short len, unsigned char *cp)
192 192 /* Acknowledge the Open. */
193 193 trace_ds("> WriteStructuredField FileTransferData OpenAck\n");
194 194 h3270.obptr = h3270.obuf;
195   - space3270out(6);
  195 + space3270out(&h3270,6);
196 196 *h3270.obptr++ = AID_SF;
197 197 SET16(h3270.obptr, 5);
198 198 *h3270.obptr++ = SF_TRANSFER_DATA;
199 199 SET16(h3270.obptr, 9);
200   - net_output();
  200 + net_output(&h3270);
201 201 }
202 202  
203 203 /* Process an Insert request. */
... ... @@ -317,7 +317,7 @@ dft_data_insert(struct data_buffer *data_bufr)
317 317 /* Send an acknowledgement frame back. */
318 318 trace_ds("> WriteStructuredField FileTransferData DataAck(rec=%lu)\n", recnum);
319 319 h3270.obptr = h3270.obuf;
320   - space3270out(12);
  320 + space3270out(&h3270,12);
321 321 *h3270.obptr++ = AID_SF;
322 322 SET16(h3270.obptr, 11);
323 323 *h3270.obptr++ = SF_TRANSFER_DATA;
... ... @@ -325,7 +325,7 @@ dft_data_insert(struct data_buffer *data_bufr)
325 325 SET16(h3270.obptr, TR_RECNUM_HDR);
326 326 SET32(h3270.obptr, recnum);
327 327 recnum++;
328   - net_output();
  328 + net_output(&h3270);
329 329 }
330 330  
331 331 /* Process a Set Cursor request. */
... ... @@ -354,7 +354,7 @@ dft_get_request(void)
354 354  
355 355 /* Read a buffer's worth. */
356 356 set_dft_buffersize();
357   - space3270out(dft_buffersize);
  357 + space3270out(&h3270,dft_buffersize);
358 358 numbytes = dft_buffersize - 27; /* always read 5 bytes less than we're allowed */
359 359 bufptr = h3270.obuf + 17;
360 360 while (!dft_eof && numbytes) {
... ... @@ -464,7 +464,7 @@ dft_get_request(void)
464 464 h3270.aid = AID_SF;
465 465  
466 466 /* Write the data. */
467   - net_output();
  467 + net_output(&h3270);
468 468 ft_update_length((H3270FT *) h3270.ft);
469 469 }
470 470  
... ... @@ -479,12 +479,12 @@ dft_close_request(void)
479 479 trace_ds(" Close\n");
480 480 trace_ds("> WriteStructuredField FileTransferData CloseAck\n");
481 481 h3270.obptr = h3270.obuf;
482   - space3270out(6);
  482 + space3270out(&h3270,6);
483 483 *h3270.obptr++ = AID_SF;
484 484 SET16(h3270.obptr, 5); /* length */
485 485 *h3270.obptr++ = SF_TRANSFER_DATA;
486 486 SET16(h3270.obptr, TR_CLOSE_REPLY);
487   - net_output();
  487 + net_output(&h3270);
488 488 }
489 489  
490 490 /* Abort a transfer. */
... ... @@ -502,7 +502,7 @@ static void dft_abort(unsigned short code, const char *fmt, ...)
502 502 trace_ds("> WriteStructuredField FileTransferData Error\n");
503 503  
504 504 h3270.obptr = h3270.obuf;
505   - space3270out(10);
  505 + space3270out(&h3270,10);
506 506 *h3270.obptr++ = AID_SF;
507 507 SET16(h3270.obptr, 9); /* length */
508 508 *h3270.obptr++ = SF_TRANSFER_DATA;
... ... @@ -510,7 +510,7 @@ static void dft_abort(unsigned short code, const char *fmt, ...)
510 510 *h3270.obptr++ = TR_ERROR_REPLY;
511 511 SET16(h3270.obptr, TR_ERROR_HDR);
512 512 SET16(h3270.obptr, TR_ERR_CMDFAIL);
513   - net_output();
  513 + net_output(&h3270);
514 514  
515 515 /* Update the pop-up and state. */
516 516 ft_aborting((H3270FT *) h3270.ft);
... ... @@ -533,13 +533,14 @@ filter_len(char *s, register int len)
533 533 void
534 534 dft_read_modified(void)
535 535 {
536   - if (dft_savebuf_len) {
  536 + if (dft_savebuf_len)
  537 + {
537 538 trace_ds("> WriteStructuredField FileTransferData\n");
538 539 h3270.obptr = h3270.obuf;
539   - space3270out(dft_savebuf_len);
  540 + space3270out(&h3270,dft_savebuf_len);
540 541 memcpy(h3270.obptr, dft_savebuf, dft_savebuf_len);
541 542 h3270.obptr += dft_savebuf_len;
542   - net_output();
  543 + net_output(&h3270);
543 544 }
544 545 }
545 546  
... ...
src/lib3270/rpq.c
... ... @@ -140,7 +140,7 @@ void do_qr_rpqnames(void)
140 140 * By pre-allocating the space I don't have to worry about the
141 141 * possibility of addresses changing.
142 142 */
143   - space3270out(4+4+1+remaining); /* Maximum space for an RPQNAME item */
  143 + space3270out(&h3270,4+4+1+remaining); /* Maximum space for an RPQNAME item */
144 144  
145 145 SET32(h3270.obptr, 0); /* Device number, 0 = All */
146 146 SET32(h3270.obptr, 0); /* Model number, 0 = All */
... ...
src/lib3270/sf.c
... ... @@ -654,7 +654,7 @@ static void
654 654 query_reply_start(void)
655 655 {
656 656 h3270.obptr = h3270.obuf;
657   - space3270out(1);
  657 + space3270out(&h3270,1);
658 658 *h3270.obptr++ = AID_SF;
659 659 qr_in_progress = True;
660 660 }
... ... @@ -684,7 +684,7 @@ do_query_reply(unsigned char code)
684 684 int obptr0 = h3270.obptr - h3270.obuf;
685 685 Boolean full = True;
686 686  
687   - space3270out(4);
  687 + space3270out(&h3270,4);
688 688 h3270.obptr += 2; /* skip length for now */
689 689 *h3270.obptr++ = SFID_QREPLY;
690 690 *h3270.obptr++ = code;
... ... @@ -723,7 +723,7 @@ do_qr_summary(void)
723 723 const char *comma = "";
724 724  
725 725 trace_ds("> QueryReply(Summary(");
726   - space3270out(NSR);
  726 + space3270out(&h3270,NSR);
727 727 for (i = 0; i < NSR; i++) {
728 728 #if defined(X3270_DBCS) /*[*/
729 729 if (dbcs || replies[i].code != QR_DBCS_ASIA) {
... ... @@ -744,7 +744,7 @@ do_qr_usable_area(void)
744 744 unsigned short num, denom;
745 745  
746 746 trace_ds("> QueryReply(UsableArea)\n");
747   - space3270out(19);
  747 + space3270out(&h3270,19);
748 748 *h3270.obptr++ = 0x01; /* 12/14-bit addressing */
749 749 *h3270.obptr++ = 0x00; /* no special character features */
750 750 SET16(h3270.obptr, h3270.maxCOLS); /* usable width */
... ... @@ -781,7 +781,7 @@ do_qr_color(void)
781 781  
782 782 color_max = h3270.color8 ? 8: 16; /* report on 8 or 16 colors */
783 783  
784   - space3270out(4 + 2*15);
  784 + space3270out(&h3270,4 + 2*15);
785 785 *h3270.obptr++ = 0x00; /* no options */
786 786 *h3270.obptr++ = color_max; /* report on 8 or 16 colors */
787 787 *h3270.obptr++ = 0x00; /* default color: */
... ... @@ -812,7 +812,7 @@ static void
812 812 do_qr_highlighting(void)
813 813 {
814 814 trace_ds("> QueryReply(Highlighting)\n");
815   - space3270out(11);
  815 + space3270out(&h3270,11);
816 816 *h3270.obptr++ = 5; /* report on 5 pairs */
817 817 *h3270.obptr++ = XAH_DEFAULT; /* default: */
818 818 *h3270.obptr++ = XAH_NORMAL; /* normal */
... ... @@ -830,7 +830,7 @@ static void
830 830 do_qr_reply_modes(void)
831 831 {
832 832 trace_ds("> QueryReply(ReplyModes)\n");
833   - space3270out(3);
  833 + space3270out(&h3270,3);
834 834 *h3270.obptr++ = SF_SRM_FIELD;
835 835 *h3270.obptr++ = SF_SRM_XFIELD;
836 836 *h3270.obptr++ = SF_SRM_CHAR;
... ... @@ -857,7 +857,7 @@ static void
857 857 do_qr_alpha_part(void)
858 858 {
859 859 trace_ds("> QueryReply(AlphanumericPartitions)\n");
860   - space3270out(4);
  860 + space3270out(&h3270,4);
861 861 *h3270.obptr++ = 0; /* 1 partition */
862 862 SET16(h3270.obptr, h3270.maxROWS * h3270.maxCOLS); /* buffer space */
863 863 *h3270.obptr++ = 0; /* no special features */
... ... @@ -867,7 +867,7 @@ static void
867 867 do_qr_charsets(void)
868 868 {
869 869 trace_ds("> QueryReply(CharacterSets)\n");
870   - space3270out(64);
  870 + space3270out(&h3270,64);
871 871 #if defined(X3270_DBCS) /*[*/
872 872 if (dbcs)
873 873 *h3270.obptr++ = 0x8e; /* flags: GE, CGCSGID, DBCS */
... ... @@ -953,7 +953,7 @@ do_qr_ddm(void)
953 953 set_dft_buffersize();
954 954  
955 955 trace_ds("> QueryReply(DistributedDataManagement)\n");
956   - space3270out(8);
  956 + space3270out(&h3270,8);
957 957 SET16(h3270.obptr,0); /* set reserved field to 0 */
958 958 SET16(h3270.obptr, dft_buffersize); /* set inbound length limit INLIM */
959 959 SET16(h3270.obptr, dft_buffersize); /* set outbound length limit OUTLIM */
... ... @@ -965,7 +965,7 @@ static void
965 965 do_qr_imp_part(void)
966 966 {
967 967 trace_ds("> QueryReply(ImplicitPartition)\n");
968   - space3270out(13);
  968 + space3270out(&h3270,13);
969 969 *h3270.obptr++ = 0x0; /* reserved */
970 970 *h3270.obptr++ = 0x0;
971 971 *h3270.obptr++ = 0x0b; /* length of display size */
... ... @@ -980,6 +980,6 @@ do_qr_imp_part(void)
980 980 static void
981 981 query_reply_end(void)
982 982 {
983   - net_output();
  983 + net_output(&h3270);
984 984 kybd_inhibit(&h3270,True);
985 985 }
... ...
src/lib3270/telnet.c
... ... @@ -231,7 +231,7 @@ static void tn3270e_nak(H3270 *hSession, enum pds);
231 231 #endif /*]*/
232 232  
233 233 #if defined(X3270_ANSI) /*[*/
234   -static void do_data(char c);
  234 +static void do_data(H3270 *hSession, char c);
235 235 static void do_intr(H3270 *hSession, char c);
236 236 static void do_quit(H3270 *hSession, char c);
237 237 static void do_cerase(H3270 *hSession, char c);
... ... @@ -756,21 +756,21 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo
756 756 #undef close_fail
757 757  
758 758 /* Set up the LU list. */
759   -static void
760   -setup_lus(void)
  759 +static void setup_lus(H3270 *hSession)
761 760 {
762 761 char *lu;
763 762 char *comma;
764 763 int n_lus = 1;
765 764 int i;
766 765  
767   - h3270.connected_lu = CN;
768   - h3270.connected_type = CN;
  766 + hSession->connected_lu = CN;
  767 + hSession->connected_type = CN;
769 768  
770   - if (!h3270.luname[0]) {
771   - Replace(h3270.lus, NULL);
772   - h3270.curr_lu = (char **)NULL;
773   - h3270.try_lu = CN;
  769 + if (!hSession->luname[0])
  770 + {
  771 + Replace(hSession->lus, NULL);
  772 + hSession->curr_lu = (char **)NULL;
  773 + hSession->try_lu = CN;
774 774 return;
775 775 }
776 776  
... ... @@ -778,8 +778,9 @@ setup_lus(void)
778 778 * Count the commas in the LU name. That plus one is the
779 779 * number of LUs to try.
780 780 */
781   - lu = h3270.luname;
782   - while ((comma = strchr(lu, ',')) != CN) {
  781 + lu = hSession->luname;
  782 + while ((comma = strchr(lu, ',')) != CN)
  783 + {
783 784 n_lus++;
784 785 lu++;
785 786 }
... ... @@ -788,23 +789,27 @@ setup_lus(void)
788 789 * Allocate enough memory to construct an argv[] array for
789 790 * the LUs.
790 791 */
791   - Replace(h3270.lus,(char **)lib3270_malloc((n_lus+1) * sizeof(char *) + strlen(h3270.luname) + 1));
  792 + Replace(hSession->lus,(char **)lib3270_malloc((n_lus+1) * sizeof(char *) + strlen(hSession->luname) + 1));
792 793  
793 794 /* Copy each LU into the array. */
794   - lu = (char *)(h3270.lus + n_lus + 1);
795   - (void) strcpy(lu, h3270.luname);
  795 + lu = (char *)(hSession->lus + n_lus + 1);
  796 + (void) strcpy(lu, hSession->luname);
  797 +
796 798 i = 0;
797   - do {
798   - h3270.lus[i++] = lu;
  799 + do
  800 + {
  801 + hSession->lus[i++] = lu;
799 802 comma = strchr(lu, ',');
800   - if (comma != CN) {
  803 + if (comma != CN)
  804 + {
801 805 *comma = '\0';
802 806 lu = comma + 1;
803 807 }
804 808 } while (comma != CN);
805   - h3270.lus[i] = CN;
806   - h3270.curr_lu = h3270.lus;
807   - h3270.try_lu = *h3270.curr_lu;
  809 +
  810 + hSession->lus[i] = CN;
  811 + hSession->curr_lu = hSession->lus;
  812 + hSession->try_lu = *hSession->curr_lu;
808 813 }
809 814  
810 815 static void net_connected(H3270 *session)
... ... @@ -895,7 +900,7 @@ LIB3270_EXPORT void lib3270_setup_session(H3270 *session)
895 900 need_tls_follows = False;
896 901 #endif /*]*/
897 902 session->telnet_state = TNS_DATA;
898   - session->ibptr = h3270.ibuf;
  903 + session->ibptr = session->ibuf;
899 904  
900 905 /* clear statistics and flags */
901 906 time(&session->ns_time);
... ... @@ -908,7 +913,7 @@ LIB3270_EXPORT void lib3270_setup_session(H3270 *session)
908 913 session->tn3270e_submode = E_NONE;
909 914 session->tn3270e_bound = 0;
910 915  
911   - setup_lus();
  916 + setup_lus(session);
912 917  
913 918 check_linemode(session,True);
914 919  
... ... @@ -1444,7 +1449,7 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1444 1449 check_linemode(session,False);
1445 1450 }
1446 1451 if (c == TELOPT_NAWS)
1447   - send_naws(&h3270);
  1452 + send_naws(session);
1448 1453 #if defined(HAVE_LIBSSL) /*[*/
1449 1454 if (c == TELOPT_STARTTLS) {
1450 1455 static unsigned char follows_msg[] = {
... ... @@ -1456,8 +1461,7 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1456 1461 * Send IAC SB STARTTLS FOLLOWS IAC SE
1457 1462 * to announce that what follows is TLS.
1458 1463 */
1459   - net_rawout(&h3270, follows_msg,
1460   - sizeof(follows_msg));
  1464 + net_rawout(session, follows_msg, sizeof(follows_msg));
1461 1465 trace_dsn("SENT %s %s FOLLOWS %s\n",
1462 1466 cmd(SB),
1463 1467 opt(TELOPT_STARTTLS),
... ... @@ -1469,53 +1473,57 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1469 1473 default:
1470 1474 wont:
1471 1475 wont_opt[2] = c;
1472   - net_rawout(&h3270, wont_opt, sizeof(wont_opt));
  1476 + net_rawout(session, wont_opt, sizeof(wont_opt));
1473 1477 trace_dsn("SENT %s %s\n", cmd(WONT), opt(c));
1474 1478 break;
1475 1479 }
1476   - h3270.telnet_state = TNS_DATA;
  1480 + session->telnet_state = TNS_DATA;
1477 1481 break;
1478 1482 case TNS_DONT: /* telnet PLEASE DON'T DO OPTION command */
1479 1483 trace_dsn("%s\n", opt(c));
1480   - if (h3270.myopts[c]) {
1481   - h3270.myopts[c] = 0;
  1484 + if (session->myopts[c]) {
  1485 + session->myopts[c] = 0;
1482 1486 wont_opt[2] = c;
1483   - net_rawout(&h3270, wont_opt, sizeof(wont_opt));
  1487 + net_rawout(session, wont_opt, sizeof(wont_opt));
1484 1488 trace_dsn("SENT %s %s\n", cmd(WONT), opt(c));
1485   - check_in3270(&h3270);
1486   - check_linemode(&h3270,False);
  1489 + check_in3270(session);
  1490 + check_linemode(session,False);
1487 1491 }
1488   - h3270.telnet_state = TNS_DATA;
  1492 + session->telnet_state = TNS_DATA;
1489 1493 break;
1490 1494 case TNS_SB: /* telnet sub-option string command */
1491 1495 if (c == IAC)
1492   - h3270.telnet_state = TNS_SB_IAC;
  1496 + session->telnet_state = TNS_SB_IAC;
1493 1497 else
1494   - *h3270.sbptr++ = c;
  1498 + *session->sbptr++ = c;
1495 1499 break;
1496 1500 case TNS_SB_IAC: /* telnet sub-option string command */
1497   - *h3270.sbptr++ = c;
  1501 + *session->sbptr++ = c;
1498 1502 if (c == SE) {
1499   - h3270.telnet_state = TNS_DATA;
1500   - if (session->sbbuf[0] == TELOPT_TTYPE &&
1501   - session->sbbuf[1] == TELQUAL_SEND) {
  1503 + session->telnet_state = TNS_DATA;
  1504 + if (session->sbbuf[0] == TELOPT_TTYPE && session->sbbuf[1] == TELQUAL_SEND)
  1505 + {
1502 1506 int tt_len, tb_len;
1503 1507 char *tt_out;
1504 1508  
1505   - trace_dsn("%s %s\n", opt(session->sbbuf[0]),
1506   - telquals[session->sbbuf[1]]);
1507   - if (session->lus != (char **)NULL && h3270.try_lu == CN) {
  1509 + trace_dsn("%s %s\n", opt(session->sbbuf[0]),telquals[session->sbbuf[1]]);
  1510 +
  1511 + if (session->lus != (char **)NULL && session->try_lu == CN)
  1512 + {
1508 1513 /* None of the LUs worked. */
1509 1514 popup_an_error(NULL,"Cannot connect to specified LU");
1510 1515 return -1;
1511 1516 }
1512 1517  
1513 1518 tt_len = strlen(session->termtype);
1514   - if (h3270.try_lu != CN && *h3270.try_lu) {
1515   - tt_len += strlen(h3270.try_lu) + 1;
1516   - session->connected_lu = h3270.try_lu;
1517   - } else
  1519 + if (session->try_lu != CN && *session->try_lu)
  1520 + {
  1521 + tt_len += strlen(session->try_lu) + 1;
  1522 + session->connected_lu = session->try_lu;
  1523 + }
  1524 + else
1518 1525 session->connected_lu = CN;
  1526 +
1519 1527 status_lu(session,session->connected_lu);
1520 1528  
1521 1529 tb_len = 4 + tt_len + 2;
... ... @@ -1523,10 +1531,10 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1523 1531 (void) sprintf(tt_out, "%c%c%c%c%s%s%s%c%c",
1524 1532 IAC, SB, TELOPT_TTYPE, TELQUAL_IS,
1525 1533 session->termtype,
1526   - (h3270.try_lu != CN && *h3270.try_lu) ? "@" : "",
1527   - (h3270.try_lu != CN && *h3270.try_lu) ? h3270.try_lu : "",
  1534 + (session->try_lu != CN && *session->try_lu) ? "@" : "",
  1535 + (session->try_lu != CN && *session->try_lu) ? session->try_lu : "",
1528 1536 IAC, SE);
1529   - net_rawout(&h3270, (unsigned char *)tt_out, tb_len);
  1537 + net_rawout(session, (unsigned char *)tt_out, tb_len);
1530 1538  
1531 1539 trace_dsn("SENT %s %s %s %.*s %s\n",
1532 1540 cmd(SB), opt(TELOPT_TTYPE),
... ... @@ -1536,25 +1544,24 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1536 1544 lib3270_free(tt_out);
1537 1545  
1538 1546 /* Advance to the next LU name. */
1539   - next_lu(&h3270);
  1547 + next_lu(session);
1540 1548 }
1541 1549 #if defined(X3270_TN3270E) /*[*/
1542   - else if (h3270.myopts[TELOPT_TN3270E] &&
1543   - h3270.sbbuf[0] == TELOPT_TN3270E) {
1544   - if (tn3270e_negotiate(&h3270))
  1550 + else if (session->myopts[TELOPT_TN3270E] && session->sbbuf[0] == TELOPT_TN3270E)
  1551 + {
  1552 + if (tn3270e_negotiate(session))
1545 1553 return -1;
1546 1554 }
1547 1555 #endif /*]*/
1548 1556 #if defined(HAVE_LIBSSL) /*[*/
1549   - else if (need_tls_follows &&
1550   - h3270.myopts[TELOPT_STARTTLS] &&
1551   - h3270.sbbuf[0] == TELOPT_STARTTLS) {
1552   - continue_tls(h3270.sbbuf, h3270.sbptr - h3270.sbbuf);
  1557 + else if (need_tls_follows && session->myopts[TELOPT_STARTTLS] && session->sbbuf[0] == TELOPT_STARTTLS)
  1558 + {
  1559 + continue_tls(session->sbbuf, session->sbptr - session->sbbuf);
1553 1560 }
1554 1561 #endif /*]*/
1555 1562  
1556 1563 } else {
1557   - h3270.telnet_state = TNS_SB;
  1564 + session->telnet_state = TNS_SB;
1558 1565 }
1559 1566 break;
1560 1567 }
... ... @@ -1563,39 +1570,38 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1563 1570  
1564 1571 #if defined(X3270_TN3270E) /*[*/
1565 1572 /* Send a TN3270E terminal type request. */
1566   -static void
1567   -tn3270e_request(void)
  1573 +static void tn3270e_request(H3270 *hSession)
1568 1574 {
1569 1575 int tt_len, tb_len;
1570 1576 char *tt_out;
1571 1577 char *t;
1572 1578  
1573   - tt_len = strlen(h3270.termtype);
1574   - if (h3270.try_lu != CN && *h3270.try_lu)
1575   - tt_len += strlen(h3270.try_lu) + 1;
  1579 + tt_len = strlen(hSession->termtype);
  1580 + if (hSession->try_lu != CN && *hSession->try_lu)
  1581 + tt_len += strlen(hSession->try_lu) + 1;
1576 1582  
1577 1583 tb_len = 5 + tt_len + 2;
1578 1584 tt_out = lib3270_malloc(tb_len + 1);
1579 1585 t = tt_out;
1580 1586 t += sprintf(tt_out, "%c%c%c%c%c%s",
1581 1587 IAC, SB, TELOPT_TN3270E, TN3270E_OP_DEVICE_TYPE,
1582   - TN3270E_OP_REQUEST, h3270.termtype);
  1588 + TN3270E_OP_REQUEST, hSession->termtype);
1583 1589  
1584 1590 /* Convert 3279 to 3278, per the RFC. */
1585 1591 if (tt_out[12] == '9')
1586 1592 tt_out[12] = '8';
1587 1593  
1588   - if (h3270.try_lu != CN && *h3270.try_lu)
1589   - t += sprintf(t, "%c%s", TN3270E_OP_CONNECT, h3270.try_lu);
  1594 + if (hSession->try_lu != CN && *hSession->try_lu)
  1595 + t += sprintf(t, "%c%s", TN3270E_OP_CONNECT, hSession->try_lu);
1590 1596  
1591 1597 (void) sprintf(t, "%c%c", IAC, SE);
1592 1598  
1593   - net_rawout(&h3270, (unsigned char *)tt_out, tb_len);
  1599 + net_rawout(hSession, (unsigned char *)tt_out, tb_len);
1594 1600  
1595 1601 trace_dsn("SENT %s %s DEVICE-TYPE REQUEST %.*s%s%s %s\n",
1596   - cmd(SB), opt(TELOPT_TN3270E), (int) strlen(h3270.termtype), tt_out + 5,
1597   - (h3270.try_lu != CN && *h3270.try_lu) ? " CONNECT " : "",
1598   - (h3270.try_lu != CN && *h3270.try_lu) ? h3270.try_lu : "",
  1602 + cmd(SB), opt(TELOPT_TN3270E), (int) strlen(hSession->termtype), tt_out + 5,
  1603 + (hSession->try_lu != CN && *hSession->try_lu) ? " CONNECT " : "",
  1604 + (hSession->try_lu != CN && *hSession->try_lu) ? hSession->try_lu : "",
1599 1605 cmd(SE));
1600 1606  
1601 1607 lib3270_free(tt_out);
... ... @@ -1604,22 +1610,21 @@ tn3270e_request(void)
1604 1610 /*
1605 1611 * Back off of TN3270E.
1606 1612 */
1607   -static void
1608   -backoff_tn3270e(const char *why)
  1613 +static void backoff_tn3270e(H3270 *hSession, const char *why)
1609 1614 {
1610 1615 trace_dsn("Aborting TN3270E: %s\n", why);
1611 1616  
1612 1617 /* Tell the host 'no'. */
1613 1618 wont_opt[2] = TELOPT_TN3270E;
1614   - net_rawout(&h3270, wont_opt, sizeof(wont_opt));
  1619 + net_rawout(hSession, wont_opt, sizeof(wont_opt));
1615 1620 trace_dsn("SENT %s %s\n", cmd(WONT), opt(TELOPT_TN3270E));
1616 1621  
1617 1622 /* Restore the LU list; we may need to run it again in TN3270 mode. */
1618   - setup_lus();
  1623 + setup_lus(hSession);
1619 1624  
1620 1625 /* Reset our internal state. */
1621   - h3270.myopts[TELOPT_TN3270E] = 0;
1622   - check_in3270(&h3270);
  1626 + hSession->myopts[TELOPT_TN3270E] = 0;
  1627 + check_in3270(hSession);
1623 1628 }
1624 1629  
1625 1630 /*
... ... @@ -1652,7 +1657,7 @@ static int tn3270e_negotiate(H3270 *hSession)
1652 1657 /* Host wants us to send our device type. */
1653 1658 trace_dsn("SEND DEVICE-TYPE SE\n");
1654 1659  
1655   - tn3270e_request();
  1660 + tn3270e_request(hSession);
1656 1661 } else {
1657 1662 trace_dsn("SEND ??%u SE\n", hSession->sbbuf[2]);
1658 1663 }
... ... @@ -1711,19 +1716,24 @@ static int tn3270e_negotiate(H3270 *hSession)
1711 1716 trace_dsn("REJECT REASON %s SE\n", rsn(hSession->sbbuf[4]));
1712 1717 if (hSession->sbbuf[4] == TN3270E_REASON_INV_DEVICE_TYPE ||
1713 1718 hSession->sbbuf[4] == TN3270E_REASON_UNSUPPORTED_REQ) {
1714   - backoff_tn3270e(_( "Host rejected device type or request type" ));
  1719 + backoff_tn3270e(hSession,_( "Host rejected device type or request type" ));
1715 1720 break;
1716 1721 }
1717 1722  
1718 1723 next_lu(hSession);
1719   - if (hSession->try_lu != CN) {
  1724 + if (hSession->try_lu != CN)
  1725 + {
1720 1726 /* Try the next LU. */
1721   - tn3270e_request();
1722   - } else if (hSession->lus != (char **)NULL) {
  1727 + tn3270e_request(hSession);
  1728 + }
  1729 + else if (hSession->lus != (char **)NULL)
  1730 + {
1723 1731 /* No more LUs to try. Give up. */
1724   - backoff_tn3270e(_("Host rejected resource(s)"));
1725   - } else {
1726   - backoff_tn3270e(_("Device type rejected"));
  1732 + backoff_tn3270e(hSession,_("Host rejected resource(s)"));
  1733 + }
  1734 + else
  1735 + {
  1736 + backoff_tn3270e(hSession,_("Device type rejected"));
1727 1737 }
1728 1738  
1729 1739 break;
... ... @@ -1782,7 +1792,7 @@ static int tn3270e_negotiate(H3270 *hSession)
1782 1792 * They've added something. Abandon
1783 1793 * TN3270E, they're brain dead.
1784 1794 */
1785   - backoff_tn3270e("Host illegally added function(s)");
  1795 + backoff_tn3270e(hSession,_( "Host illegally added function(s)" ));
1786 1796 break;
1787 1797 }
1788 1798 }
... ... @@ -2191,11 +2201,11 @@ static void net_cookout(H3270 *hSession, const char *buf, int len)
2191 2201 else if (c == 0x08 || c == 0x7f) /* Yes, a hack. */
2192 2202 do_cerase(hSession,c);
2193 2203 else
2194   - do_data(c);
  2204 + do_data(hSession,c);
2195 2205 }
2196 2206 return;
2197 2207 } else
2198   - net_cookedout(&h3270, buf, len);
  2208 + net_cookedout(hSession, buf, len);
2199 2209 }
2200 2210  
2201 2211  
... ... @@ -2219,35 +2229,36 @@ ansi_process_s(const char *data)
2219 2229 ansi_process((unsigned int) *data++);
2220 2230 }
2221 2231  
2222   -static void
2223   -forward_data(void)
  2232 +static void forward_data(H3270 *hSession)
2224 2233 {
2225   - net_cookedout(&h3270, (char *) h3270.lbuf, h3270.lbptr - h3270.lbuf);
2226   - cooked_init(&h3270);
  2234 + net_cookedout(hSession, (char *) hSession->lbuf, hSession->lbptr - hSession->lbuf);
  2235 + cooked_init(hSession);
2227 2236 }
2228 2237  
2229   -static void
2230   -do_data(char c)
  2238 +static void do_data(H3270 *hSession, char c)
2231 2239 {
2232   - if (h3270.lbptr+1 < h3270.lbuf + BUFSZ) {
2233   - *h3270.lbptr++ = c;
  2240 + if (hSession->lbptr+1 < hSession->lbuf + BUFSZ)
  2241 + {
  2242 + *hSession->lbptr++ = c;
2234 2243 if (c == '\r')
2235   - *h3270.lbptr++ = 'lbptr++ = '\0';';
  2244 + *hSession->lbptr++ = 'lbptr++ = '\0';';
2236 2245 if (c == '\t')
2237 2246 ansi_process((unsigned int) c);
2238 2247 else
2239 2248 ansi_process_s(ctl_see((int) c));
2240   - } else
  2249 + }
  2250 + else
2241 2251 ansi_process_s("\007");
2242   - h3270.lnext = 0;
2243   - h3270.backslashed = 0;
  2252 +
  2253 + hSession->lnext = 0;
  2254 + hSession->backslashed = 0;
2244 2255 }
2245 2256  
2246 2257 static void do_intr(H3270 *hSession, char c)
2247 2258 {
2248 2259 if (hSession->lnext)
2249 2260 {
2250   - do_data(c);
  2261 + do_data(hSession,c);
2251 2262 return;
2252 2263 }
2253 2264 ansi_process_s(ctl_see((int) c));
... ... @@ -2259,7 +2270,7 @@ static void do_quit(H3270 *hSession, char c)
2259 2270 {
2260 2271 if (hSession->lnext)
2261 2272 {
2262   - do_data(c);
  2273 + do_data(hSession,c);
2263 2274 return;
2264 2275 }
2265 2276 ansi_process_s(ctl_see((int) c));
... ... @@ -2275,14 +2286,16 @@ static void do_cerase(H3270 *hSession, char c)
2275 2286 {
2276 2287 hSession->lbptr--;
2277 2288 ansi_process_s("\b");
2278   - do_data(c);
  2289 + do_data(hSession,c);
2279 2290 return;
2280 2291 }
  2292 +
2281 2293 if (hSession->lnext)
2282 2294 {
2283   - do_data(c);
  2295 + do_data(hSession,c);
2284 2296 return;
2285 2297 }
  2298 +
2286 2299 if (hSession->lbptr > hSession->lbuf)
2287 2300 {
2288 2301 len = strlen(ctl_see((int) *--hSession->lbptr));
... ... @@ -2297,10 +2310,12 @@ static void do_werase(H3270 *hSession, char c)
2297 2310 int any = 0;
2298 2311 int len;
2299 2312  
2300   - if (hSession->lnext) {
2301   - do_data(c);
  2313 + if (hSession->lnext)
  2314 + {
  2315 + do_data(hSession,c);
2302 2316 return;
2303 2317 }
  2318 +
2304 2319 while (hSession->lbptr > hSession->lbuf) {
2305 2320 char ch;
2306 2321  
... ... @@ -2327,14 +2342,18 @@ static void do_kill(H3270 *hSession, char c)
2327 2342 if (hSession->backslashed) {
2328 2343 hSession->lbptr--;
2329 2344 ansi_process_s("\b");
2330   - do_data(c);
  2345 + do_data(hSession,c);
2331 2346 return;
2332 2347 }
2333   - if (hSession->lnext) {
2334   - do_data(c);
  2348 +
  2349 + if (hSession->lnext)
  2350 + {
  2351 + do_data(hSession,c);
2335 2352 return;
2336 2353 }
2337   - while (hSession->lbptr > hSession->lbuf) {
  2354 +
  2355 + while (hSession->lbptr > hSession->lbuf)
  2356 + {
2338 2357 len = strlen(ctl_see((int) *--hSession->lbptr));
2339 2358  
2340 2359 for (i = 0; i < len; i++)
... ... @@ -2346,10 +2365,12 @@ static void do_rprnt(H3270 *hSession, char c)
2346 2365 {
2347 2366 unsigned char *p;
2348 2367  
2349   - if (hSession->lnext) {
2350   - do_data(c);
  2368 + if (hSession->lnext)
  2369 + {
  2370 + do_data(hSession,c);
2351 2371 return;
2352 2372 }
  2373 +
2353 2374 ansi_process_s(ctl_see((int) c));
2354 2375 ansi_process_s("\r\n");
2355 2376 for (p = hSession->lbuf; p < hSession->lbptr; p++)
... ... @@ -2358,40 +2379,49 @@ static void do_rprnt(H3270 *hSession, char c)
2358 2379  
2359 2380 static void do_eof(H3270 *hSession, char c)
2360 2381 {
2361   - if (hSession->backslashed) {
  2382 + if (hSession->backslashed)
  2383 + {
2362 2384 hSession->lbptr--;
2363 2385 ansi_process_s("\b");
2364   - do_data(c);
  2386 + do_data(hSession,c);
2365 2387 return;
2366 2388 }
2367   - if (hSession->lnext) {
2368   - do_data(c);
  2389 +
  2390 + if (hSession->lnext)
  2391 + {
  2392 + do_data(hSession,c);
2369 2393 return;
2370 2394 }
2371   - do_data(c);
2372   - forward_data();
  2395 +
  2396 + do_data(hSession,c);
  2397 + forward_data(hSession);
2373 2398 }
2374 2399  
2375 2400 static void do_eol(H3270 *hSession, char c)
2376 2401 {
2377   - if (hSession->lnext) {
2378   - do_data(c);
  2402 + if (hSession->lnext)
  2403 + {
  2404 + do_data(hSession,c);
2379 2405 return;
2380 2406 }
2381   - if (hSession->lbptr+2 >= hSession->lbuf + BUFSZ) {
  2407 +
  2408 + if (hSession->lbptr+2 >= hSession->lbuf + BUFSZ)
  2409 + {
2382 2410 ansi_process_s("\007");
2383 2411 return;
2384 2412 }
  2413 +
2385 2414 *hSession->lbptr++ = '\r';
2386 2415 *hSession->lbptr++ = '\n';
2387 2416 ansi_process_s("\r\n");
2388   - forward_data();
  2417 + forward_data(hSession);
2389 2418 }
2390 2419  
2391 2420 static void do_lnext(H3270 *hSession, char c)
2392 2421 {
2393   - if (hSession->lnext) {
2394   - do_data(c);
  2422 + if (hSession->lnext)
  2423 + {
  2424 + do_data(hSession,c);
2395 2425 return;
2396 2426 }
2397 2427 hSession->lnext = 1;
... ... @@ -2519,29 +2549,34 @@ static void store3270in(H3270 *hSession, unsigned char c)
2519 2549 *hSession->ibptr++ = c;
2520 2550 }
2521 2551  
2522   -/*
2523   - * space3270out
2524   - * Ensure that <n> more characters will fit in the 3270 output buffer.
2525   - * Allocates the buffer in BUFSIZ chunks.
2526   - * Allocates hidden space at the front of the buffer for TN3270E.
  2552 +/**
  2553 + * Ensure that <n> more characters will fit in the 3270 output buffer.
  2554 + *
  2555 + * Allocates the buffer in BUFSIZ chunks.
  2556 + * Allocates hidden space at the front of the buffer for TN3270E.
  2557 + *
  2558 + * @param hSession 3270 session handle.
  2559 + * @param n Number of characters to set.
2527 2560 */
2528   -void space3270out(int n)
  2561 +void space3270out(H3270 *hSession, int n)
2529 2562 {
2530 2563 unsigned nc = 0; /* amount of data currently in obuf */
2531 2564 unsigned more = 0;
2532 2565  
2533   - if (h3270.obuf_size)
2534   - nc = h3270.obptr - h3270.obuf;
  2566 + if (hSession->obuf_size)
  2567 + nc = hSession->obptr - hSession->obuf;
2535 2568  
2536   - while ((nc + n + EH_SIZE) > (h3270.obuf_size + more)) {
  2569 + while ((nc + n + EH_SIZE) > (hSession->obuf_size + more))
  2570 + {
2537 2571 more += BUFSIZ;
2538 2572 }
2539 2573  
2540   - if (more) {
2541   - h3270.obuf_size += more;
2542   - h3270.obuf_base = (unsigned char *)Realloc((char *) h3270.obuf_base,h3270.obuf_size);
2543   - h3270.obuf = h3270.obuf_base + EH_SIZE;
2544   - h3270.obptr = h3270.obuf + nc;
  2574 + if (more)
  2575 + {
  2576 + hSession->obuf_size += more;
  2577 + hSession->obuf_base = (unsigned char *)Realloc((char *) hSession->obuf_base,hSession->obuf_size);
  2578 + hSession->obuf = hSession->obuf_base + EH_SIZE;
  2579 + hSession->obptr = hSession->obuf + nc;
2545 2580 }
2546 2581 }
2547 2582  
... ... @@ -2660,66 +2695,75 @@ void trace_netdata(char direction, unsigned const char *buf, int len)
2660 2695 #endif // X3270_TRACE
2661 2696  
2662 2697  
2663   -/*
2664   - * net_output
2665   - * Send 3270 output over the network:
  2698 +/**
  2699 + * Send 3270 output over the network.
  2700 + *
  2701 + * Send 3270 output over the network:
2666 2702 * - Prepend TN3270E header
2667 2703 * - Expand IAC to IAC IAC
2668 2704 * - Append IAC EOR
  2705 + *
  2706 + * @param hSession Session handle
  2707 + *
2669 2708 */
2670   -void
2671   -net_output(void)
  2709 +void net_output(H3270 *hSession)
2672 2710 {
2673 2711 static unsigned char *xobuf = NULL;
2674 2712 static int xobuf_len = 0;
2675 2713 int need_resize = 0;
2676 2714 unsigned char *nxoptr, *xoptr;
2677 2715  
2678   -#if defined(X3270_TN3270E) /*[*/
2679   -#define BSTART ((IN_TN3270E || IN_SSCP) ? h3270.obuf_base : h3270.obuf)
2680   -#else /*][*/
2681   -#define BSTART obuf
2682   -#endif /*]*/
  2716 +#if defined(X3270_TN3270E)
  2717 + #define BSTART ((IN_TN3270E || IN_SSCP) ? hSession->obuf_base : hSession->obuf)
  2718 +#else
  2719 + #define BSTART obuf
  2720 +#endif
2683 2721  
2684 2722 #if defined(X3270_TN3270E) /*[*/
2685 2723 /* Set the TN3720E header. */
2686   - if (IN_TN3270E || IN_SSCP) {
2687   - tn3270e_header *h = (tn3270e_header *) h3270.obuf_base;
  2724 + if (IN_TN3270E || IN_SSCP)
  2725 + {
  2726 + tn3270e_header *h = (tn3270e_header *) hSession->obuf_base;
2688 2727  
2689 2728 /* Check for sending a TN3270E response. */
2690   - if (h3270.response_required == TN3270E_RSF_ALWAYS_RESPONSE) {
2691   - tn3270e_ack(&h3270);
2692   - h3270.response_required = TN3270E_RSF_NO_RESPONSE;
  2729 + if (hSession->response_required == TN3270E_RSF_ALWAYS_RESPONSE)
  2730 + {
  2731 + tn3270e_ack(hSession);
  2732 + hSession->response_required = TN3270E_RSF_NO_RESPONSE;
2693 2733 }
2694 2734  
2695 2735 /* Set the outbound TN3270E header. */
2696   - h->data_type = IN_TN3270E ?
2697   - TN3270E_DT_3270_DATA : TN3270E_DT_SSCP_LU_DATA;
  2736 + h->data_type = IN_TN3270E ? TN3270E_DT_3270_DATA : TN3270E_DT_SSCP_LU_DATA;
2698 2737 h->request_flag = 0;
2699 2738 h->response_flag = 0;
2700   - h->seq_number[0] = (h3270.e_xmit_seq >> 8) & 0xff;
2701   - h->seq_number[1] = h3270.e_xmit_seq & 0xff;
  2739 + h->seq_number[0] = (hSession->e_xmit_seq >> 8) & 0xff;
  2740 + h->seq_number[1] = hSession->e_xmit_seq & 0xff;
2702 2741  
2703   - trace_dsn("SENT TN3270E(%s NO-RESPONSE %u)\n",IN_TN3270E ? "3270-DATA" : "SSCP-LU-DATA", h3270.e_xmit_seq);
2704   - if (h3270.e_funcs & E_OPT(TN3270E_FUNC_RESPONSES))
2705   - h3270.e_xmit_seq = (h3270.e_xmit_seq + 1) & 0x7fff;
  2742 + trace_dsn("SENT TN3270E(%s NO-RESPONSE %u)\n",IN_TN3270E ? "3270-DATA" : "SSCP-LU-DATA", hSession->e_xmit_seq);
  2743 + if (hSession->e_funcs & E_OPT(TN3270E_FUNC_RESPONSES))
  2744 + hSession->e_xmit_seq = (hSession->e_xmit_seq + 1) & 0x7fff;
2706 2745 }
2707 2746 #endif /*]*/
2708 2747  
2709 2748 /* Reallocate the expanded output buffer. */
2710   - while (xobuf_len < (h3270.obptr - BSTART + 1) * 2) {
  2749 + while (xobuf_len < (hSession->obptr - BSTART + 1) * 2)
  2750 + {
2711 2751 xobuf_len += BUFSZ;
2712 2752 need_resize++;
2713 2753 }
2714   - if (need_resize) {
  2754 +
  2755 + if (need_resize)
  2756 + {
2715 2757 Replace(xobuf, (unsigned char *)lib3270_malloc(xobuf_len));
2716 2758 }
2717 2759  
2718 2760 /* Copy and expand IACs. */
2719 2761 xoptr = xobuf;
2720 2762 nxoptr = BSTART;
2721   - while (nxoptr < h3270.obptr) {
2722   - if ((*xoptr++ = *nxoptr++) == IAC) {
  2763 + while (nxoptr < hSession->obptr)
  2764 + {
  2765 + if ((*xoptr++ = *nxoptr++) == IAC)
  2766 + {
2723 2767 *xoptr++ = IAC;
2724 2768 }
2725 2769 }
... ... @@ -2727,10 +2771,10 @@ net_output(void)
2727 2771 /* Append the IAC EOR and transmit. */
2728 2772 *xoptr++ = IAC;
2729 2773 *xoptr++ = EOR;
2730   - net_rawout(&h3270,xobuf, xoptr - xobuf);
  2774 + net_rawout(hSession,xobuf, xoptr - xobuf);
2731 2775  
2732 2776 trace_dsn("SENT EOR\n");
2733   - h3270.ns_rsent++;
  2777 + hSession->ns_rsent++;
2734 2778 #undef BSTART
2735 2779 }
2736 2780  
... ... @@ -2808,7 +2852,7 @@ net_add_dummy_tn3270e(void)
2808 2852 if (!IN_E || h3270.tn3270e_submode == E_NONE)
2809 2853 return False;
2810 2854  
2811   - space3270out(EH_SIZE);
  2855 + space3270out(&h3270,EH_SIZE);
2812 2856 h = (tn3270e_header *)h3270.obptr;
2813 2857  
2814 2858 switch (h3270.tn3270e_submode) {
... ...
src/lib3270/telnetc.h
... ... @@ -42,7 +42,7 @@ LIB3270_INTERNAL void net_input(H3270 *session);
42 42 LIB3270_INTERNAL void net_interrupt(void);
43 43 // LIB3270_INTERNAL void net_linemode(void);
44 44 // LIB3270_INTERNAL struct ctl_char *net_linemode_chars(void);
45   -LIB3270_INTERNAL void net_output(void);
  45 +LIB3270_INTERNAL void net_output(H3270 *hSession);
46 46 LIB3270_INTERNAL const char *net_query_bind_plu_name(void);
47 47 LIB3270_INTERNAL const char *net_query_connection_state(void);
48 48 LIB3270_INTERNAL const char *net_query_host(void);
... ... @@ -53,7 +53,7 @@ LIB3270_INTERNAL void net_send_erase(void);
53 53 LIB3270_INTERNAL void net_send_kill(void);
54 54 LIB3270_INTERNAL void net_send_werase(void);
55 55 // LIB3270_INTERNAL Boolean net_snap_options(void);
56   -LIB3270_INTERNAL void space3270out(int n);
  56 +LIB3270_INTERNAL void space3270out(H3270 *hSession, int n);
57 57 // LIB3270_INTERNAL const char *tn3270e_current_opts(void);
58 58 // LIB3270_INTERNAL char *net_proxy_type(void);
59 59 //LIB3270_INTERNAL char *net_proxy_host(void);
... ...
src/pw3270/common/config.c
... ... @@ -18,7 +18,7 @@
18 18 * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19 19 * St, Fifth Floor, Boston, MA 02110-1301 USA
20 20 *
21   - * Este programa está nomeado como config.c e possui 389 linhas de código.
  21 + * Este programa está nomeado como config.c e possui - linhas de código.
22 22 *
23 23 * Contatos:
24 24 *
... ...