Commit 07fe2293fc7c9d349d1d1fb97195880834ea0a4f

Authored by perry.werneck@gmail.com
1 parent 5df280a2

Ajustes para multi-sessão

src/include/lib3270/session.h
... ... @@ -182,6 +182,9 @@
182 182 // Telnet.c
183 183 unsigned char * ibuf;
184 184 int ibuf_size; /**< size of ibuf */
  185 + unsigned char * obuf; /**< 3270 output buffer */
  186 + unsigned char * obptr;
  187 +
185 188 unsigned char myopts[LIB3270_TELNET_N_OPTS];
186 189 unsigned char hisopts[LIB3270_TELNET_N_OPTS];
187 190  
... ...
src/lib3270/ctlr.c
... ... @@ -549,9 +549,9 @@ insert_sa1(unsigned char attr, unsigned char value, unsigned char *currentp, Boo
549 549 return;
550 550 *currentp = value;
551 551 space3270out(3);
552   - *obptr++ = ORDER_SA;
553   - *obptr++ = attr;
554   - *obptr++ = value;
  552 + *h3270.obptr++ = ORDER_SA;
  553 + *h3270.obptr++ = attr;
  554 + *h3270.obptr++ = value;
555 555 if (*anyp)
556 556 trace_ds("'");
557 557 trace_ds(" SetAttribute(%s)", see_efa(attr, value));
... ... @@ -626,16 +626,16 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all)
626 626 #endif /*]*/
627 627  
628 628 trace_ds("> ");
629   - obptr = obuf;
  629 + h3270.obptr = h3270.obuf;
630 630  
631 631 switch (aid_byte) {
632 632  
633 633 case AID_SYSREQ: /* test request */
634 634 space3270out(4);
635   - *obptr++ = 0x01; /* soh */
636   - *obptr++ = 0x5b; /* % */
637   - *obptr++ = 0x61; /* / */
638   - *obptr++ = 0x02; /* stx */
  635 + *h3270.obptr++ = 0x01; /* soh */
  636 + *h3270.obptr++ = 0x5b; /* % */
  637 + *h3270.obptr++ = 0x61; /* / */
  638 + *h3270.obptr++ = 0x02; /* stx */
639 639 trace_ds("SYSREQ");
640 640 break;
641 641  
... ... @@ -655,11 +655,11 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all)
655 655 default: /* ordinary AID */
656 656 if (!IN_SSCP) {
657 657 space3270out(3);
658   - *obptr++ = aid_byte;
  658 + *h3270.obptr++ = aid_byte;
659 659 trace_ds("%s",see_aid(aid_byte));
660 660 if (short_read)
661 661 goto rm_done;
662   - ENCODE_BADDR(obptr, h3270.cursor_addr);
  662 + ENCODE_BADDR(h3270.obptr, h3270.cursor_addr);
663 663 trace_ds("%s",rcba(&h3270,h3270.cursor_addr));
664 664 } else {
665 665 space3270out(1); /* just in case */
... ... @@ -682,8 +682,8 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all)
682 682  
683 683 INC_BA(baddr);
684 684 space3270out(3);
685   - *obptr++ = ORDER_SBA;
686   - ENCODE_BADDR(obptr, baddr);
  685 + *h3270.obptr++ = ORDER_SBA;
  686 + ENCODE_BADDR(h3270.obptr, baddr);
687 687 trace_ds(" SetBufferAddress%s (Cols: %d Rows: %d)", rcba(&h3270,baddr), h3270.cols, h3270.rows);
688 688 while (!h3270.ea_buf[baddr].fa) {
689 689  
... ... @@ -697,14 +697,14 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all)
697 697 &any);
698 698 if (h3270.ea_buf[baddr].cs & CS_GE) {
699 699 space3270out(1);
700   - *obptr++ = ORDER_GE;
  700 + *h3270.obptr++ = ORDER_GE;
701 701 if (any)
702 702 trace_ds("'");
703 703 trace_ds(" GraphicEscape");
704 704 any = False;
705 705 }
706 706 space3270out(1);
707   - *obptr++ = h3270.ea_buf[baddr].cc;
  707 + *h3270.obptr++ = h3270.ea_buf[baddr].cc;
708 708 if (!any)
709 709 trace_ds(" '");
710 710 trace_ds("%s",see_ebc(h3270.ea_buf[baddr].cc));
... ... @@ -742,14 +742,14 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all)
742 742 &any);
743 743 if (h3270.ea_buf[baddr].cs & CS_GE) {
744 744 space3270out(1);
745   - *obptr++ = ORDER_GE;
  745 + *h3270.obptr++ = ORDER_GE;
746 746 if (any)
747 747 trace_ds("' ");
748 748 trace_ds(" GraphicEscape ");
749 749 any = False;
750 750 }
751 751 space3270out(1);
752   - *obptr++ = h3270.ea_buf[baddr].cc;
  752 + *h3270.obptr++ = h3270.ea_buf[baddr].cc;
753 753 if (!any)
754 754 trace_ds("%s","'");
755 755 trace_ds("%s",see_ebc(h3270.ea_buf[baddr].cc));
... ... @@ -797,11 +797,11 @@ void ctlr_read_buffer(H3270 *hSession, unsigned char aid_byte)
797 797 #endif /*]*/
798 798  
799 799 trace_ds("> ");
800   - obptr = obuf;
  800 + h3270.obptr = h3270.obuf;
801 801  
802 802 space3270out(3);
803   - *obptr++ = aid_byte;
804   - ENCODE_BADDR(obptr, hSession->cursor_addr);
  803 + *h3270.obptr++ = aid_byte;
  804 + ENCODE_BADDR(h3270.obptr, hSession->cursor_addr);
805 805 trace_ds("%s%s", see_aid(aid_byte), rcba(hSession,hSession->cursor_addr));
806 806  
807 807 baddr = 0;
... ... @@ -809,16 +809,16 @@ void ctlr_read_buffer(H3270 *hSession, unsigned char aid_byte)
809 809 if (hSession->ea_buf[baddr].fa) {
810 810 if (hSession->reply_mode == SF_SRM_FIELD) {
811 811 space3270out(2);
812   - *obptr++ = ORDER_SF;
  812 + *h3270.obptr++ = ORDER_SF;
813 813 } else {
814 814 space3270out(4);
815   - *obptr++ = ORDER_SFE;
816   - attr_count = obptr - obuf;
817   - *obptr++ = 1; /* for now */
818   - *obptr++ = XA_3270;
  815 + *h3270.obptr++ = ORDER_SFE;
  816 + attr_count = h3270.obptr - h3270.obuf;
  817 + *h3270.obptr++ = 1; /* for now */
  818 + *h3270.obptr++ = XA_3270;
819 819 }
820 820 fa = hSession->ea_buf[baddr].fa & ~FA_PRINTABLE;
821   - *obptr++ = code_table[fa];
  821 + *h3270.obptr++ = code_table[fa];
822 822 if (any)
823 823 trace_ds("'");
824 824 trace_ds(" StartField%s%s%s",
... ... @@ -827,32 +827,32 @@ void ctlr_read_buffer(H3270 *hSession, unsigned char aid_byte)
827 827 if (hSession->reply_mode != SF_SRM_FIELD) {
828 828 if (hSession->ea_buf[baddr].fg) {
829 829 space3270out(2);
830   - *obptr++ = XA_FOREGROUND;
831   - *obptr++ = hSession->ea_buf[baddr].fg;
  830 + *h3270.obptr++ = XA_FOREGROUND;
  831 + *h3270.obptr++ = hSession->ea_buf[baddr].fg;
832 832 trace_ds("%s", see_efa(XA_FOREGROUND, hSession->ea_buf[baddr].fg));
833   - (*(obuf + attr_count))++;
  833 + (*(h3270.obuf + attr_count))++;
834 834 }
835 835 if (hSession->ea_buf[baddr].bg) {
836 836 space3270out(2);
837   - *obptr++ = XA_BACKGROUND;
838   - *obptr++ = hSession->ea_buf[baddr].bg;
  837 + *h3270.obptr++ = XA_BACKGROUND;
  838 + *h3270.obptr++ = hSession->ea_buf[baddr].bg;
839 839 trace_ds("%s", see_efa(XA_BACKGROUND, hSession->ea_buf[baddr].bg));
840   - (*(obuf + attr_count))++;
  840 + (*(h3270.obuf + attr_count))++;
841 841 }
842 842 if (hSession->ea_buf[baddr].gr) {
843 843 space3270out(2);
844   - *obptr++ = XA_HIGHLIGHTING;
845   - *obptr++ = hSession->ea_buf[baddr].gr | 0xf0;
  844 + *h3270.obptr++ = XA_HIGHLIGHTING;
  845 + *h3270.obptr++ = hSession->ea_buf[baddr].gr | 0xf0;
846 846 trace_ds("%s", see_efa(XA_HIGHLIGHTING,
847 847 hSession->ea_buf[baddr].gr | 0xf0));
848   - (*(obuf + attr_count))++;
  848 + (*(h3270.obuf + attr_count))++;
849 849 }
850 850 if (hSession->ea_buf[baddr].cs & CS_MASK) {
851 851 space3270out(2);
852   - *obptr++ = XA_CHARSET;
853   - *obptr++ = host_cs(hSession->ea_buf[baddr].cs);
  852 + *h3270.obptr++ = XA_CHARSET;
  853 + *h3270.obptr++ = host_cs(hSession->ea_buf[baddr].cs);
854 854 trace_ds("%s", see_efa(XA_CHARSET,host_cs(hSession->ea_buf[baddr].cs)));
855   - (*(obuf + attr_count))++;
  855 + (*(h3270.obuf + attr_count))++;
856 856 }
857 857 }
858 858 any = False;
... ... @@ -865,14 +865,14 @@ void ctlr_read_buffer(H3270 *hSession, unsigned char aid_byte)
865 865 &any);
866 866 if (hSession->ea_buf[baddr].cs & CS_GE) {
867 867 space3270out(1);
868   - *obptr++ = ORDER_GE;
  868 + *h3270.obptr++ = ORDER_GE;
869 869 if (any)
870 870 trace_ds("'");
871 871 trace_ds(" GraphicEscape");
872 872 any = False;
873 873 }
874 874 space3270out(1);
875   - *obptr++ = hSession->ea_buf[baddr].cc;
  875 + *h3270.obptr++ = hSession->ea_buf[baddr].cc;
876 876 if (hSession->ea_buf[baddr].cc <= 0x3f ||
877 877 hSession->ea_buf[baddr].cc == 0xff) {
878 878 if (any)
... ...
src/lib3270/ft_dft.c
... ... @@ -191,12 +191,12 @@ dft_open_request(unsigned short len, unsigned char *cp)
191 191  
192 192 /* Acknowledge the Open. */
193 193 trace_ds("> WriteStructuredField FileTransferData OpenAck\n");
194   - obptr = obuf;
  194 + h3270.obptr = h3270.obuf;
195 195 space3270out(6);
196   - *obptr++ = AID_SF;
197   - SET16(obptr, 5);
198   - *obptr++ = SF_TRANSFER_DATA;
199   - SET16(obptr, 9);
  196 + *h3270.obptr++ = AID_SF;
  197 + SET16(h3270.obptr, 5);
  198 + *h3270.obptr++ = SF_TRANSFER_DATA;
  199 + SET16(h3270.obptr, 9);
200 200 net_output();
201 201 }
202 202  
... ... @@ -316,14 +316,14 @@ dft_data_insert(struct data_buffer *data_bufr)
316 316  
317 317 /* Send an acknowledgement frame back. */
318 318 trace_ds("> WriteStructuredField FileTransferData DataAck(rec=%lu)\n", recnum);
319   - obptr = obuf;
  319 + h3270.obptr = h3270.obuf;
320 320 space3270out(12);
321   - *obptr++ = AID_SF;
322   - SET16(obptr, 11);
323   - *obptr++ = SF_TRANSFER_DATA;
324   - SET16(obptr, TR_NORMAL_REPLY);
325   - SET16(obptr, TR_RECNUM_HDR);
326   - SET32(obptr, recnum);
  321 + *h3270.obptr++ = AID_SF;
  322 + SET16(h3270.obptr, 11);
  323 + *h3270.obptr++ = SF_TRANSFER_DATA;
  324 + SET16(h3270.obptr, TR_NORMAL_REPLY);
  325 + SET16(h3270.obptr, TR_RECNUM_HDR);
  326 + SET32(h3270.obptr, recnum);
327 327 recnum++;
328 328 net_output();
329 329 }
... ... @@ -356,7 +356,7 @@ dft_get_request(void)
356 356 set_dft_buffersize();
357 357 space3270out(dft_buffersize);
358 358 numbytes = dft_buffersize - 27; /* always read 5 bytes less than we're allowed */
359   - bufptr = obuf + 17;
  359 + bufptr = h3270.obuf + 17;
360 360 while (!dft_eof && numbytes) {
361 361 if (ascii_flag && cr_flag) {
362 362 int c;
... ... @@ -416,22 +416,22 @@ dft_get_request(void)
416 416 }
417 417  
418 418 /* Set up SF header for Data or EOF. */
419   - obptr = obuf;
420   - *obptr++ = AID_SF;
421   - obptr += 2; /* skip SF length for now */
422   - *obptr++ = SF_TRANSFER_DATA;
  419 + h3270.obptr = h3270.obuf;
  420 + *h3270.obptr++ = AID_SF;
  421 + h3270.obptr += 2; /* skip SF length for now */
  422 + *h3270.obptr++ = SF_TRANSFER_DATA;
423 423  
424 424 if (total_read) {
425 425 trace_ds("> WriteStructuredField FileTransferData Data(rec=%lu) %d bytes\n",
426 426 (unsigned long) recnum, (int) total_read);
427   - SET16(obptr, TR_GET_REPLY);
428   - SET16(obptr, TR_RECNUM_HDR);
429   - SET32(obptr, recnum);
  427 + SET16(h3270.obptr, TR_GET_REPLY);
  428 + SET16(h3270.obptr, TR_RECNUM_HDR);
  429 + SET32(h3270.obptr, recnum);
430 430 recnum++;
431   - SET16(obptr, TR_NOT_COMPRESSED);
432   - *obptr++ = TR_BEGIN_DATA;
433   - SET16(obptr, total_read + 5);
434   - obptr += total_read;
  431 + SET16(h3270.obptr, TR_NOT_COMPRESSED);
  432 + *h3270.obptr++ = TR_BEGIN_DATA;
  433 + SET16(h3270.obptr, total_read + 5);
  434 + h3270.obptr += total_read;
435 435  
436 436 ft_length += total_read;
437 437  
... ... @@ -442,25 +442,25 @@ dft_get_request(void)
442 442  
443 443 } else {
444 444 trace_ds("> WriteStructuredField FileTransferData EOF\n");
445   - *obptr++ = HIGH8(TR_GET_REQ);
446   - *obptr++ = TR_ERROR_REPLY;
447   - SET16(obptr, TR_ERROR_HDR);
448   - SET16(obptr, TR_ERR_EOF);
  445 + *h3270.obptr++ = HIGH8(TR_GET_REQ);
  446 + *h3270.obptr++ = TR_ERROR_REPLY;
  447 + SET16(h3270.obptr, TR_ERROR_HDR);
  448 + SET16(h3270.obptr, TR_ERR_EOF);
449 449  
450 450 dft_eof = True;
451 451 }
452 452  
453 453 /* Set the SF length. */
454   - bufptr = obuf + 1;
455   - SET16(bufptr, obptr - (obuf + 1));
  454 + bufptr = h3270.obuf + 1;
  455 + SET16(bufptr, h3270.obptr - (h3270.obuf + 1));
456 456  
457 457 /* Save the data. */
458   - dft_savebuf_len = obptr - obuf;
  458 + dft_savebuf_len = h3270.obptr - h3270.obuf;
459 459 if (dft_savebuf_len > dft_savebuf_max) {
460 460 dft_savebuf_max = dft_savebuf_len;
461 461 Replace(dft_savebuf, (unsigned char *)lib3270_malloc(dft_savebuf_max));
462 462 }
463   - (void) memcpy(dft_savebuf, obuf, dft_savebuf_len);
  463 + (void) memcpy(dft_savebuf, h3270.obuf, dft_savebuf_len);
464 464 h3270.aid = AID_SF;
465 465  
466 466 /* Write the data. */
... ... @@ -478,12 +478,12 @@ dft_close_request(void)
478 478 */
479 479 trace_ds(" Close\n");
480 480 trace_ds("> WriteStructuredField FileTransferData CloseAck\n");
481   - obptr = obuf;
  481 + h3270.obptr = h3270.obuf;
482 482 space3270out(6);
483   - *obptr++ = AID_SF;
484   - SET16(obptr, 5); /* length */
485   - *obptr++ = SF_TRANSFER_DATA;
486   - SET16(obptr, TR_CLOSE_REPLY);
  483 + *h3270.obptr++ = AID_SF;
  484 + SET16(h3270.obptr, 5); /* length */
  485 + *h3270.obptr++ = SF_TRANSFER_DATA;
  486 + SET16(h3270.obptr, TR_CLOSE_REPLY);
487 487 net_output();
488 488 }
489 489  
... ... @@ -501,15 +501,15 @@ static void dft_abort(unsigned short code, const char *fmt, ...)
501 501  
502 502 trace_ds("> WriteStructuredField FileTransferData Error\n");
503 503  
504   - obptr = obuf;
  504 + h3270.obptr = h3270.obuf;
505 505 space3270out(10);
506   - *obptr++ = AID_SF;
507   - SET16(obptr, 9); /* length */
508   - *obptr++ = SF_TRANSFER_DATA;
509   - *obptr++ = HIGH8(code);
510   - *obptr++ = TR_ERROR_REPLY;
511   - SET16(obptr, TR_ERROR_HDR);
512   - SET16(obptr, TR_ERR_CMDFAIL);
  506 + *h3270.obptr++ = AID_SF;
  507 + SET16(h3270.obptr, 9); /* length */
  508 + *h3270.obptr++ = SF_TRANSFER_DATA;
  509 + *h3270.obptr++ = HIGH8(code);
  510 + *h3270.obptr++ = TR_ERROR_REPLY;
  511 + SET16(h3270.obptr, TR_ERROR_HDR);
  512 + SET16(h3270.obptr, TR_ERR_CMDFAIL);
513 513 net_output();
514 514  
515 515 /* Update the pop-up and state. */
... ... @@ -535,10 +535,10 @@ dft_read_modified(void)
535 535 {
536 536 if (dft_savebuf_len) {
537 537 trace_ds("> WriteStructuredField FileTransferData\n");
538   - obptr = obuf;
  538 + h3270.obptr = h3270.obuf;
539 539 space3270out(dft_savebuf_len);
540   - memcpy(obptr, dft_savebuf, dft_savebuf_len);
541   - obptr += dft_savebuf_len;
  540 + memcpy(h3270.obptr, dft_savebuf, dft_savebuf_len);
  541 + h3270.obptr += dft_savebuf_len;
542 542 net_output();
543 543 }
544 544 }
... ...
src/lib3270/rpq.c
... ... @@ -142,14 +142,14 @@ void do_qr_rpqnames(void)
142 142 */
143 143 space3270out(4+4+1+remaining); /* Maximum space for an RPQNAME item */
144 144  
145   - SET32(obptr, 0); /* Device number, 0 = All */
146   - SET32(obptr, 0); /* Model number, 0 = All */
  145 + SET32(h3270.obptr, 0); /* Device number, 0 = All */
  146 + SET32(h3270.obptr, 0); /* Model number, 0 = All */
147 147  
148   - rpql = obptr++; /* Save address to place data length. */
  148 + rpql = h3270.obptr++; /* Save address to place data length. */
149 149  
150 150 /* Create fixed length portion - program id: x3270 */
151 151 for (j = 0; j < 5; j++) {
152   - *obptr++ = asc2ebc[(int)"x3270"[j]];
  152 + *h3270.obptr++ = asc2ebc[(int)"x3270"[j]];
153 153 remaining--;
154 154 }
155 155  
... ... @@ -164,11 +164,9 @@ void do_qr_rpqnames(void)
164 164  
165 165 term_id = rpq_keywords[j].id;
166 166  
167   - p_term = obptr; /* save starting address (to insert
168   - length later) */
169   - obptr++; /* skip length of term, fill in
170   - later */
171   - *obptr++ = term_id; /* identify this term */
  167 + p_term = h3270.obptr; /* save starting address (to insert length later) */
  168 + h3270.obptr++; /* skip length of term, fill in later */
  169 + *h3270.obptr++ = term_id; /* identify this term */
172 170  
173 171 /*
174 172 * Adjust remaining space by the term prefix size so each case
... ... @@ -180,18 +178,18 @@ void do_qr_rpqnames(void)
180 178  
181 179 switch (term_id) { /* build the term based on id */
182 180 case RPQ_USER: /* User text from env. vars */
183   - obptr += get_rpq_user(obptr, remaining);
  181 + h3270.obptr += get_rpq_user(h3270.obptr, remaining);
184 182 break;
185 183  
186 184 case RPQ_TIMEZONE: /* UTC time offset */
187 185 omit_due_space_limit = (remaining < 2);
188 186 if (!omit_due_space_limit)
189   - SET16(obptr, get_rpq_timezone());
  187 + SET16(h3270.obptr, get_rpq_timezone());
190 188 break;
191 189  
192 190 case RPQ_ADDRESS: /* Workstation address */
193 191 #if !defined(_WIN32) /*[*/
194   - obptr += get_rpq_address(obptr, remaining);
  192 + h3270.obptr += get_rpq_address(h3270.obptr, remaining);
195 193 #endif /*]*/
196 194 break;
197 195  
... ... @@ -200,7 +198,7 @@ void do_qr_rpqnames(void)
200 198 omit_due_space_limit = (x > remaining);
201 199 if (!omit_due_space_limit) {
202 200 for (i = 0; i < x; i++) {
203   - *obptr++ = asc2ebc[(int)(*(build_rpq_version+i) & 0xff)];
  201 + *h3270.obptr++ = asc2ebc[(int)(*(build_rpq_version+i) & 0xff)];
204 202 }
205 203 }
206 204 break;
... ... @@ -210,7 +208,7 @@ void do_qr_rpqnames(void)
210 208 omit_due_space_limit = ((x+1)/2 > remaining);
211 209 if (!omit_due_space_limit) {
212 210 for (i=0; i < x; i+=2) {
213   - *obptr++ = ((*(build_rpq_timestamp+i) - '0') << 4)
  211 + *h3270.obptr++ = ((*(build_rpq_timestamp+i) - '0') << 4)
214 212 + (*(build_rpq_timestamp+i+1) - '0');
215 213 }
216 214 }
... ... @@ -228,14 +226,14 @@ void do_qr_rpqnames(void)
228 226 * adjust space remaining.
229 227 * obptr now points at "next available byte".
230 228 */
231   - x = obptr-p_term;
  229 + x = h3270.obptr-p_term;
232 230 if (x > TERM_PREFIX_SIZE) {
233 231 *p_term = x;
234 232 remaining -= x; /* This includes length and id fields,
235 233 correction below */
236 234 } else {
237 235 /* We didn't add an item after all, reset pointer. */
238   - obptr = p_term;
  236 + h3270.obptr = p_term;
239 237 }
240 238 /*
241 239 * When we calculated the length of the term, a few lines
... ... @@ -257,7 +255,7 @@ void do_qr_rpqnames(void)
257 255 }
258 256  
259 257 /* Fill in overall length of RPQNAME info */
260   - *rpql = (obptr - rpql);
  258 + *rpql = (h3270.obptr - rpql);
261 259  
262 260 rpq_dump_warnings();
263 261 }
... ...
src/lib3270/sf.c
... ... @@ -653,9 +653,9 @@ sf_outbound_ds(unsigned char buf[], int buflen)
653 653 static void
654 654 query_reply_start(void)
655 655 {
656   - obptr = obuf;
  656 + h3270.obptr = h3270.obuf;
657 657 space3270out(1);
658   - *obptr++ = AID_SF;
  658 + *h3270.obptr++ = AID_SF;
659 659 qr_in_progress = True;
660 660 }
661 661  
... ... @@ -681,13 +681,13 @@ do_query_reply(unsigned char code)
681 681 }
682 682  
683 683 do {
684   - int obptr0 = obptr - obuf;
  684 + int obptr0 = h3270.obptr - h3270.obuf;
685 685 Boolean full = True;
686 686  
687 687 space3270out(4);
688   - obptr += 2; /* skip length for now */
689   - *obptr++ = SFID_QREPLY;
690   - *obptr++ = code;
  688 + h3270.obptr += 2; /* skip length for now */
  689 + *h3270.obptr++ = SFID_QREPLY;
  690 + *h3270.obptr++ = code;
691 691  
692 692 more = False;
693 693 if (replies[i].single_fn)
... ... @@ -700,12 +700,12 @@ do_query_reply(unsigned char code)
700 700 unsigned char *obptr_len;
701 701  
702 702 /* Fill in the length. */
703   - obptr_len = obuf + obptr0;
704   - len = (obptr - obuf) - obptr0;
  703 + obptr_len = h3270.obuf + obptr0;
  704 + len = (h3270.obptr - h3270.obuf) - obptr0;
705 705 SET16(obptr_len, len);
706 706 } else {
707 707 /* Back over the header. */
708   - obptr -= 4;
  708 + h3270.obptr -= 4;
709 709 }
710 710 } while (more);
711 711 }
... ... @@ -730,7 +730,7 @@ do_qr_summary(void)
730 730 #endif /*]*/
731 731 trace_ds("%s%s", comma, see_qcode(replies[i].code));
732 732 comma = ",";
733   - *obptr++ = replies[i].code;
  733 + *h3270.obptr++ = replies[i].code;
734 734 #if defined(X3270_DBCS) /*[*/
735 735 }
736 736 #endif /*]*/
... ... @@ -745,30 +745,30 @@ do_qr_usable_area(void)
745 745  
746 746 trace_ds("> QueryReply(UsableArea)\n");
747 747 space3270out(19);
748   - *obptr++ = 0x01; /* 12/14-bit addressing */
749   - *obptr++ = 0x00; /* no special character features */
750   - SET16(obptr, h3270.maxCOLS); /* usable width */
751   - SET16(obptr, h3270.maxROWS); /* usable height */
752   - *obptr++ = 0x01; /* units (mm) */
  748 + *h3270.obptr++ = 0x01; /* 12/14-bit addressing */
  749 + *h3270.obptr++ = 0x00; /* no special character features */
  750 + SET16(h3270.obptr, h3270.maxCOLS); /* usable width */
  751 + SET16(h3270.obptr, h3270.maxROWS); /* usable height */
  752 + *h3270.obptr++ = 0x01; /* units (mm) */
753 753 num = display_widthMM();
754 754 denom = display_width();
755 755 while (!(num %2) && !(denom % 2)) {
756 756 num /= 2;
757 757 denom /= 2;
758 758 }
759   - SET16(obptr, (int)num); /* Xr numerator */
760   - SET16(obptr, (int)denom); /* Xr denominator */
  759 + SET16(h3270.obptr, (int)num); /* Xr numerator */
  760 + SET16(h3270.obptr, (int)denom); /* Xr denominator */
761 761 num = display_heightMM();
762 762 denom = display_height();
763 763 while (!(num %2) && !(denom % 2)) {
764 764 num /= 2;
765 765 denom /= 2;
766 766 }
767   - SET16(obptr, (int)num); /* Yr numerator */
768   - SET16(obptr, (int)denom); /* Yr denominator */
769   - *obptr++ = *char_width; /* AW */
770   - *obptr++ = *char_height;/* AH */
771   - SET16(obptr, h3270.maxCOLS * h3270.maxROWS); /* buffer, questionable */
  767 + SET16(h3270.obptr, (int)num); /* Yr numerator */
  768 + SET16(h3270.obptr, (int)denom); /* Yr denominator */
  769 + *h3270.obptr++ = *char_width; /* AW */
  770 + *h3270.obptr++ = *char_height;/* AH */
  771 + SET16(h3270.obptr, h3270.maxCOLS * h3270.maxROWS); /* buffer, questionable */
772 772 }
773 773  
774 774 static void
... ... @@ -782,16 +782,16 @@ do_qr_color(void)
782 782 color_max = h3270.color8 ? 8: 16; /* report on 8 or 16 colors */
783 783  
784 784 space3270out(4 + 2*15);
785   - *obptr++ = 0x00; /* no options */
786   - *obptr++ = color_max; /* report on 8 or 16 colors */
787   - *obptr++ = 0x00; /* default color: */
788   - *obptr++ = 0xf0 + COLOR_GREEN; /* green */
  785 + *h3270.obptr++ = 0x00; /* no options */
  786 + *h3270.obptr++ = color_max; /* report on 8 or 16 colors */
  787 + *h3270.obptr++ = 0x00; /* default color: */
  788 + *h3270.obptr++ = 0xf0 + COLOR_GREEN; /* green */
789 789 for (i = 0xf1; i < 0xf1 + color_max - 1; i++) {
790   - *obptr++ = i;
  790 + *h3270.obptr++ = i;
791 791 if (h3270.m3279)
792   - *obptr++ = i;
  792 + *h3270.obptr++ = i;
793 793 else
794   - *obptr++ = 0x00;
  794 + *h3270.obptr++ = 0x00;
795 795 }
796 796  
797 797 /*
... ... @@ -813,17 +813,17 @@ do_qr_highlighting(void)
813 813 {
814 814 trace_ds("> QueryReply(Highlighting)\n");
815 815 space3270out(11);
816   - *obptr++ = 5; /* report on 5 pairs */
817   - *obptr++ = XAH_DEFAULT; /* default: */
818   - *obptr++ = XAH_NORMAL; /* normal */
819   - *obptr++ = XAH_BLINK; /* blink: */
820   - *obptr++ = XAH_BLINK; /* blink */
821   - *obptr++ = XAH_REVERSE; /* reverse: */
822   - *obptr++ = XAH_REVERSE; /* reverse */
823   - *obptr++ = XAH_UNDERSCORE; /* underscore: */
824   - *obptr++ = XAH_UNDERSCORE; /* underscore */
825   - *obptr++ = XAH_INTENSIFY; /* intensify: */
826   - *obptr++ = XAH_INTENSIFY; /* intensify */
  816 + *h3270.obptr++ = 5; /* report on 5 pairs */
  817 + *h3270.obptr++ = XAH_DEFAULT; /* default: */
  818 + *h3270.obptr++ = XAH_NORMAL; /* normal */
  819 + *h3270.obptr++ = XAH_BLINK; /* blink: */
  820 + *h3270.obptr++ = XAH_BLINK; /* blink */
  821 + *h3270.obptr++ = XAH_REVERSE; /* reverse: */
  822 + *h3270.obptr++ = XAH_REVERSE; /* reverse */
  823 + *h3270.obptr++ = XAH_UNDERSCORE; /* underscore: */
  824 + *h3270.obptr++ = XAH_UNDERSCORE; /* underscore */
  825 + *h3270.obptr++ = XAH_INTENSIFY; /* intensify: */
  826 + *h3270.obptr++ = XAH_INTENSIFY; /* intensify */
827 827 }
828 828  
829 829 static void
... ... @@ -831,9 +831,9 @@ do_qr_reply_modes(void)
831 831 {
832 832 trace_ds("> QueryReply(ReplyModes)\n");
833 833 space3270out(3);
834   - *obptr++ = SF_SRM_FIELD;
835   - *obptr++ = SF_SRM_XFIELD;
836   - *obptr++ = SF_SRM_CHAR;
  834 + *h3270.obptr++ = SF_SRM_FIELD;
  835 + *h3270.obptr++ = SF_SRM_XFIELD;
  836 + *h3270.obptr++ = SF_SRM_CHAR;
837 837 }
838 838  
839 839 #if defined(X3270_DBCS) /*[*/
... ... @@ -858,9 +858,9 @@ do_qr_alpha_part(void)
858 858 {
859 859 trace_ds("> QueryReply(AlphanumericPartitions)\n");
860 860 space3270out(4);
861   - *obptr++ = 0; /* 1 partition */
862   - SET16(obptr, h3270.maxROWS * h3270.maxCOLS); /* buffer space */
863   - *obptr++ = 0; /* no special features */
  861 + *h3270.obptr++ = 0; /* 1 partition */
  862 + SET16(h3270.obptr, h3270.maxROWS * h3270.maxCOLS); /* buffer space */
  863 + *h3270.obptr++ = 0; /* no special features */
864 864 }
865 865  
866 866 static void
... ... @@ -870,35 +870,36 @@ do_qr_charsets(void)
870 870 space3270out(64);
871 871 #if defined(X3270_DBCS) /*[*/
872 872 if (dbcs)
873   - *obptr++ = 0x8e; /* flags: GE, CGCSGID, DBCS */
  873 + *h3270.obptr++ = 0x8e; /* flags: GE, CGCSGID, DBCS */
874 874 else
875 875 #endif /*]*/
876   - *obptr++ = 0x82; /* flags: GE, CGCSGID present */
877   - *obptr++ = 0x00; /* more flags */
878   - *obptr++ = *char_width; /* SDW */
879   - *obptr++ = *char_height; /* SDW */
880   - *obptr++ = 0x00; /* no load PS */
881   - *obptr++ = 0x00;
882   - *obptr++ = 0x00;
883   - *obptr++ = 0x00;
  876 + *h3270.obptr++ = 0x82; /* flags: GE, CGCSGID present */
  877 +
  878 + *h3270.obptr++ = 0x00; /* more flags */
  879 + *h3270.obptr++ = *char_width; /* SDW */
  880 + *h3270.obptr++ = *char_height; /* SDW */
  881 + *h3270.obptr++ = 0x00; /* no load PS */
  882 + *h3270.obptr++ = 0x00;
  883 + *h3270.obptr++ = 0x00;
  884 + *h3270.obptr++ = 0x00;
884 885 #if defined(X3270_DBCS) /*[*/
885 886 if (dbcs)
886   - *obptr++ = 0x0b; /* DL (11 bytes) */
  887 + *h3270.obptr++ = 0x0b; /* DL (11 bytes) */
887 888 else
888 889 #endif /*]*/
889   - *obptr++ = 0x07; /* DL (7 bytes) */
  890 + *h3270.obptr++ = 0x07; /* DL (7 bytes) */
890 891  
891   - *obptr++ = 0x00; /* SET 0: */
  892 + *h3270.obptr++ = 0x00; /* SET 0: */
892 893 #if defined(X3270_DBCS) /*[*/
893 894 if (dbcs)
894   - *obptr++ = 0x00; /* FLAGS: non-load, single-
  895 + *h3270.obptr++ = 0x00; /* FLAGS: non-load, single-
895 896 plane, single-bute */
896 897 else
897 898 #endif /*]*/
898   - *obptr++ = 0x10; /* FLAGS: non-loadable,
  899 + *h3270.obptr++ = 0x10; /* FLAGS: non-loadable,
899 900 single-plane, single-byte,
900 901 no compare */
901   - *obptr++ = 0x00; /* LCID 0 */
  902 + *h3270.obptr++ = 0x00; /* LCID 0 */
902 903 #if defined(X3270_DBCS) /*[*/
903 904 if (dbcs) {
904 905 *obptr++ = 0x00; /* SW 0 */
... ... @@ -907,17 +908,17 @@ do_qr_charsets(void)
907 908 *obptr++ = 0x00; /* SUBSN */
908 909 }
909 910 #endif /*]*/
910   - SET32(obptr, cgcsgid); /* CGCSGID */
  911 + SET32(h3270.obptr, cgcsgid); /* CGCSGID */
911 912 if (!*standard_font) {
912 913 /* special 3270 font, includes APL */
913   - *obptr++ = 0x01;/* SET 1: */
  914 + *h3270.obptr++ = 0x01;/* SET 1: */
914 915 if (h3270.apl_mode)
915   - *obptr++ = 0x00;/* FLAGS: non-loadable, single-plane,
  916 + *h3270.obptr++ = 0x00;/* FLAGS: non-loadable, single-plane,
916 917 single-byte, no compare */
917 918 else
918   - *obptr++ = 0x10;/* FLAGS: non-loadable, single-plane,
  919 + *h3270.obptr++ = 0x10;/* FLAGS: non-loadable, single-plane,
919 920 single-byte, no compare */
920   - *obptr++ = 0xf1;/* LCID */
  921 + *h3270.obptr++ = 0xf1;/* LCID */
921 922 #if defined(X3270_DBCS) /*[*/
922 923 if (dbcs) {
923 924 *obptr++ = 0x00;/* SW 0 */
... ... @@ -926,10 +927,10 @@ do_qr_charsets(void)
926 927 *obptr++ = 0x00;/* SUBSN */
927 928 }
928 929 #endif /*]*/
929   - *obptr++ = 0x03;/* CGCSGID: 3179-style APL2 */
930   - *obptr++ = 0xc3;
931   - *obptr++ = 0x01;
932   - *obptr++ = 0x36;
  930 + *h3270.obptr++ = 0x03;/* CGCSGID: 3179-style APL2 */
  931 + *h3270.obptr++ = 0xc3;
  932 + *h3270.obptr++ = 0x01;
  933 + *h3270.obptr++ = 0x36;
933 934 }
934 935 #if defined(X3270_DBCS) /*[*/
935 936 if (dbcs) {
... ... @@ -953,10 +954,10 @@ do_qr_ddm(void)
953 954  
954 955 trace_ds("> QueryReply(DistributedDataManagement)\n");
955 956 space3270out(8);
956   - SET16(obptr,0); /* set reserved field to 0 */
957   - SET16(obptr, dft_buffersize); /* set inbound length limit INLIM */
958   - SET16(obptr, dft_buffersize); /* set outbound length limit OUTLIM */
959   - SET16(obptr, 0x0101); /* NSS=01, DDMSS=01 */
  957 + SET16(h3270.obptr,0); /* set reserved field to 0 */
  958 + SET16(h3270.obptr, dft_buffersize); /* set inbound length limit INLIM */
  959 + SET16(h3270.obptr, dft_buffersize); /* set outbound length limit OUTLIM */
  960 + SET16(h3270.obptr, 0x0101); /* NSS=01, DDMSS=01 */
960 961 }
961 962 #endif /*]*/
962 963  
... ... @@ -965,15 +966,15 @@ do_qr_imp_part(void)
965 966 {
966 967 trace_ds("> QueryReply(ImplicitPartition)\n");
967 968 space3270out(13);
968   - *obptr++ = 0x0; /* reserved */
969   - *obptr++ = 0x0;
970   - *obptr++ = 0x0b; /* length of display size */
971   - *obptr++ = 0x01; /* "implicit partition size" */
972   - *obptr++ = 0x00; /* reserved */
973   - SET16(obptr, 80); /* implicit partition width */
974   - SET16(obptr, 24); /* implicit partition height */
975   - SET16(obptr, h3270.maxCOLS); /* alternate height */
976   - SET16(obptr, h3270.maxROWS); /* alternate width */
  969 + *h3270.obptr++ = 0x0; /* reserved */
  970 + *h3270.obptr++ = 0x0;
  971 + *h3270.obptr++ = 0x0b; /* length of display size */
  972 + *h3270.obptr++ = 0x01; /* "implicit partition size" */
  973 + *h3270.obptr++ = 0x00; /* reserved */
  974 + SET16(h3270.obptr, 80); /* implicit partition width */
  975 + SET16(h3270.obptr, 24); /* implicit partition height */
  976 + SET16(h3270.obptr, h3270.maxCOLS); /* alternate height */
  977 + SET16(h3270.obptr, h3270.maxROWS); /* alternate width */
977 978 }
978 979  
979 980 static void
... ...
src/lib3270/telnet.c
... ... @@ -121,8 +121,8 @@ int ns_brcvd;
121 121 int ns_rrcvd;
122 122 int ns_bsent;
123 123 int ns_rsent;
124   -unsigned char *obuf; /* 3270 output buffer */
125   -unsigned char *obptr = (unsigned char *) NULL;
  124 +// unsigned char *obuf; /* 3270 output buffer */
  125 +// unsigned char *obptr = (unsigned char *) NULL;
126 126 int linemode = 1;
127 127  
128 128 /*
... ... @@ -2520,7 +2520,7 @@ void space3270out(int n)
2520 2520 unsigned more = 0;
2521 2521  
2522 2522 if (obuf_size)
2523   - nc = obptr - obuf;
  2523 + nc = h3270.obptr - h3270.obuf;
2524 2524  
2525 2525 while ((nc + n + EH_SIZE) > (obuf_size + more)) {
2526 2526 more += BUFSIZ;
... ... @@ -2530,8 +2530,8 @@ void space3270out(int n)
2530 2530 obuf_size += more;
2531 2531 obuf_base = (unsigned char *)Realloc((char *)obuf_base,
2532 2532 obuf_size);
2533   - obuf = obuf_base + EH_SIZE;
2534   - obptr = obuf + nc;
  2533 + h3270.obuf = obuf_base + EH_SIZE;
  2534 + h3270.obptr = h3270.obuf + nc;
2535 2535 }
2536 2536 }
2537 2537  
... ... @@ -2669,7 +2669,7 @@ net_output(void)
2669 2669 unsigned char *nxoptr, *xoptr;
2670 2670  
2671 2671 #if defined(X3270_TN3270E) /*[*/
2672   -#define BSTART ((IN_TN3270E || IN_SSCP) ? obuf_base : obuf)
  2672 +#define BSTART ((IN_TN3270E || IN_SSCP) ? obuf_base : h3270.obuf)
2673 2673 #else /*][*/
2674 2674 #define BSTART obuf
2675 2675 #endif /*]*/
... ... @@ -2701,7 +2701,7 @@ net_output(void)
2701 2701 #endif /*]*/
2702 2702  
2703 2703 /* Reallocate the expanded output buffer. */
2704   - while (xobuf_len < (obptr - BSTART + 1) * 2) {
  2704 + while (xobuf_len < (h3270.obptr - BSTART + 1) * 2) {
2705 2705 xobuf_len += BUFSZ;
2706 2706 need_resize++;
2707 2707 }
... ... @@ -2712,7 +2712,7 @@ net_output(void)
2712 2712 /* Copy and expand IACs. */
2713 2713 xoptr = xobuf;
2714 2714 nxoptr = BSTART;
2715   - while (nxoptr < obptr) {
  2715 + while (nxoptr < h3270.obptr) {
2716 2716 if ((*xoptr++ = *nxoptr++) == IAC) {
2717 2717 *xoptr++ = IAC;
2718 2718 }
... ... @@ -2802,7 +2802,7 @@ net_add_dummy_tn3270e(void)
2802 2802 return False;
2803 2803  
2804 2804 space3270out(EH_SIZE);
2805   - h = (tn3270e_header *)obptr;
  2805 + h = (tn3270e_header *)h3270.obptr;
2806 2806  
2807 2807 switch (tn3270e_submode) {
2808 2808 case E_NONE:
... ... @@ -2821,7 +2821,7 @@ net_add_dummy_tn3270e(void)
2821 2821 h->response_flag = TN3270E_RSF_NO_RESPONSE;
2822 2822 h->seq_number[0] = 0;
2823 2823 h->seq_number[1] = 0;
2824   - obptr += EH_SIZE;
  2824 + h3270.obptr += EH_SIZE;
2825 2825 return True;
2826 2826 }
2827 2827 #endif /*]*/
... ... @@ -3085,7 +3085,7 @@ net_snap_options(void)
3085 3085 if (!CONNECTED)
3086 3086 return False;
3087 3087  
3088   - obptr = obuf;
  3088 + h3270.obptr = h3270.obuf;
3089 3089  
3090 3090 /* Do TTYPE first. */
3091 3091 if (h3270.myopts[TELOPT_TTYPE]) {
... ... @@ -3093,7 +3093,7 @@ net_snap_options(void)
3093 3093  
3094 3094 space3270out(sizeof(ttype_str));
3095 3095 for (j = 0; j < sizeof(ttype_str); j++)
3096   - *obptr++ = ttype_str[j];
  3096 + *h3270.obptr++ = ttype_str[j];
3097 3097 }
3098 3098  
3099 3099 /* Do the other options. */
... ... @@ -3102,15 +3102,15 @@ net_snap_options(void)
3102 3102 if (i == TELOPT_TTYPE)
3103 3103 continue;
3104 3104 if (h3270.hisopts[i]) {
3105   - *obptr++ = IAC;
3106   - *obptr++ = WILL;
3107   - *obptr++ = (unsigned char)i;
  3105 + *h3270.obptr++ = IAC;
  3106 + *h3270.obptr++ = WILL;
  3107 + *h3270.obptr++ = (unsigned char)i;
3108 3108 any = True;
3109 3109 }
3110 3110 if (h3270.myopts[i]) {
3111   - *obptr++ = IAC;
3112   - *obptr++ = DO;
3113   - *obptr++ = (unsigned char)i;
  3111 + *h3270.obptr++ = IAC;
  3112 + *h3270.obptr++ = DO;
  3113 + *h3270.obptr++ = (unsigned char)i;
3114 3114 any = True;
3115 3115 }
3116 3116 }
... ... @@ -3124,50 +3124,48 @@ net_snap_options(void)
3124 3124 ((h3270.connected_type != CN) ? strlen(h3270.connected_type) : 0) +
3125 3125 ((h3270.connected_lu != CN) ? + strlen(h3270.connected_lu) : 0) +
3126 3126 2);
3127   - *obptr++ = IAC;
3128   - *obptr++ = SB;
3129   - *obptr++ = TELOPT_TN3270E;
3130   - *obptr++ = TN3270E_OP_DEVICE_TYPE;
3131   - *obptr++ = TN3270E_OP_IS;
  3127 + *h3270.obptr++ = IAC;
  3128 + *h3270.obptr++ = SB;
  3129 + *h3270.obptr++ = TELOPT_TN3270E;
  3130 + *h3270.obptr++ = TN3270E_OP_DEVICE_TYPE;
  3131 + *h3270.obptr++ = TN3270E_OP_IS;
3132 3132 if (h3270.connected_type != CN) {
3133   - (void) memcpy(obptr, h3270.connected_type,
3134   - strlen(h3270.connected_type));
3135   - obptr += strlen(h3270.connected_type);
  3133 + (void) memcpy(h3270.obptr, h3270.connected_type,strlen(h3270.connected_type));
  3134 + h3270.obptr += strlen(h3270.connected_type);
3136 3135 }
3137 3136 if (h3270.connected_lu != CN) {
3138   - *obptr++ = TN3270E_OP_CONNECT;
3139   - (void) memcpy(obptr, h3270.connected_lu,
3140   - strlen(h3270.connected_lu));
3141   - obptr += strlen(h3270.connected_lu);
  3137 + *h3270.obptr++ = TN3270E_OP_CONNECT;
  3138 + (void) memcpy(h3270.obptr, h3270.connected_lu,strlen(h3270.connected_lu));
  3139 + h3270.obptr += strlen(h3270.connected_lu);
3142 3140 }
3143   - *obptr++ = IAC;
3144   - *obptr++ = SE;
  3141 + *h3270.obptr++ = IAC;
  3142 + *h3270.obptr++ = SE;
3145 3143  
3146 3144 space3270out(38);
3147   - (void) memcpy(obptr, functions_req, 4);
3148   - obptr += 4;
3149   - *obptr++ = TN3270E_OP_IS;
  3145 + (void) memcpy(h3270.obptr, functions_req, 4);
  3146 + h3270.obptr += 4;
  3147 + *h3270.obptr++ = TN3270E_OP_IS;
3150 3148 for (i = 0; i < 32; i++) {
3151 3149 if (e_funcs & E_OPT(i))
3152   - *obptr++ = i;
  3150 + *h3270.obptr++ = i;
3153 3151 }
3154   - *obptr++ = IAC;
3155   - *obptr++ = SE;
  3152 + *h3270.obptr++ = IAC;
  3153 + *h3270.obptr++ = SE;
3156 3154  
3157 3155 if (tn3270e_bound) {
3158 3156 tn3270e_header *h;
3159 3157  
3160 3158 space3270out(EH_SIZE + 3);
3161   - h = (tn3270e_header *)obptr;
  3159 + h = (tn3270e_header *)h3270.obptr;
3162 3160 h->data_type = TN3270E_DT_BIND_IMAGE;
3163 3161 h->request_flag = 0;
3164 3162 h->response_flag = 0;
3165 3163 h->seq_number[0] = 0;
3166 3164 h->seq_number[1] = 0;
3167   - obptr += EH_SIZE;
3168   - *obptr++ = 1; /* dummy */
3169   - *obptr++ = IAC;
3170   - *obptr++ = EOR;
  3165 + h3270.obptr += EH_SIZE;
  3166 + *h3270.obptr++ = 1; /* dummy */
  3167 + *h3270.obptr++ = IAC;
  3168 + *h3270.obptr++ = EOR;
3171 3169 }
3172 3170 }
3173 3171 #endif /*]*/
... ...
src/lib3270/telnetc.h
... ... @@ -20,8 +20,8 @@
20 20 */
21 21  
22 22 /* Output buffer. */
23   -extern unsigned char *obuf;
24   -extern unsigned char *obptr;
  23 +// extern unsigned char *obuf;
  24 +// extern unsigned char *obptr;
25 25  
26 26 /* Spelled-out tty control character. */
27 27 struct ctl_char {
... ...