Commit b48cbcf080279591000b7c0a864acb22c28127a7
1 parent
ae2663cf
Exists in
master
Implementação de multi-sessões: Movendo mais campos de controle do terminal para…
… a estrutura de sessão
Showing
13 changed files
with
178 additions
and
165 deletions
Show diff stats
latest/src/gtk2/main.c
... | ... | @@ -90,7 +90,7 @@ static void connect_main(H3270 *session, int status, void *dunno) |
90 | 90 | { |
91 | 91 | SetStatusCode(STATUS_CODE_DISCONNECTED); |
92 | 92 | cMode &= ~CURSOR_MODE_ENABLED; |
93 | - ctlr_erase(1); | |
93 | +// ctlr_erase(1); | |
94 | 94 | online = FALSE; |
95 | 95 | #ifdef X3270_FT |
96 | 96 | action_group_set_sensitive(ACTION_GROUP_FT,status); | ... | ... |
latest/src/include/lib3270/api.h
... | ... | @@ -230,6 +230,10 @@ |
230 | 230 | int cols; |
231 | 231 | int cursor_addr; |
232 | 232 | char flipped; |
233 | + int screen_alt; /**< alternate screen? */ | |
234 | + int is_altbuffer; | |
235 | + | |
236 | + int formatted; /**< set in screen_disp */ | |
233 | 237 | |
234 | 238 | // Widget info |
235 | 239 | void * widget; |
... | ... | @@ -522,9 +526,9 @@ |
522 | 526 | LIB3270_EXPORT void show_3270_popup_dialog(H3270 *session, PW3270_DIALOG type, const char *title, const char *msg, const char *fmt, ...); |
523 | 527 | |
524 | 528 | /* Set/Get screen contents */ |
525 | - LIB3270_EXPORT int find_field_attribute(int baddr); | |
526 | - LIB3270_EXPORT int find_field_length(int baddr); | |
527 | - LIB3270_EXPORT unsigned char get_field_attribute(int baddr); | |
529 | + LIB3270_EXPORT int find_field_attribute(H3270 *session, int baddr); | |
530 | + LIB3270_EXPORT int find_field_length(H3270 *session, int baddr); | |
531 | + LIB3270_EXPORT unsigned char get_field_attribute(H3270 *session, int baddr); | |
528 | 532 | LIB3270_EXPORT int screen_read(char *dest, int baddr, int count); |
529 | 533 | LIB3270_EXPORT void Input_String(const unsigned char *str); |
530 | 534 | LIB3270_EXPORT void screen_size(int *rows, int *cols); |
... | ... | @@ -561,9 +565,8 @@ |
561 | 565 | LIB3270_EXPORT void RunPendingEvents(int wait); |
562 | 566 | LIB3270_EXPORT int Wait(int seconds); |
563 | 567 | |
564 | - LIB3270_EXPORT void ctlr_erase(int alt); | |
565 | - LIB3270_EXPORT int ctlr_get_cols(void); | |
566 | - LIB3270_EXPORT int ctlr_get_rows(void); | |
568 | + LIB3270_EXPORT int ctlr_get_cols(void) __attribute__ ((deprecated)); | |
569 | + LIB3270_EXPORT int ctlr_get_rows(void) __attribute__ ((deprecated)); | |
567 | 570 | |
568 | 571 | /* Screen calls */ |
569 | 572 | LIB3270_EXPORT void screen_resume(void); | ... | ... |
latest/src/lib/ansi.c
... | ... | @@ -605,10 +605,10 @@ ansi_reset(int ig1 unused, int ig2 unused) |
605 | 605 | tabs[i] = 0x01; |
606 | 606 | held_wrap = False; |
607 | 607 | if (!first) { |
608 | - ctlr_altbuffer(True); | |
608 | + ctlr_altbuffer(&h3270,True); | |
609 | 609 | ctlr_aclear(0, h3270.rows * h3270.cols, 1); |
610 | - ctlr_altbuffer(False); | |
611 | - ctlr_clear(False); | |
610 | + ctlr_altbuffer(&h3270,False); | |
611 | + ctlr_clear(&h3270,False); | |
612 | 612 | screen_80(); |
613 | 613 | } |
614 | 614 | first = False; |
... | ... | @@ -714,7 +714,7 @@ ansi_erase_in_display(int nn, int ig2 unused) |
714 | 714 | ctlr_aclear(0, h3270.cursor_addr + 1, 1); |
715 | 715 | break; |
716 | 716 | case 2: /* all (without moving cursor) */ |
717 | - if (cursor_addr == 0 && !is_altbuffer) | |
717 | + if (cursor_addr == 0 && !h3270.is_altbuffer) | |
718 | 718 | scroll_save(h3270.rows, True); |
719 | 719 | ctlr_aclear(0, h3270.rows * h3270.cols, 1); |
720 | 720 | break; |
... | ... | @@ -924,7 +924,7 @@ ansi_bell(int ig1 unused, int ig2 unused) |
924 | 924 | static enum state |
925 | 925 | ansi_newpage(int ig1 unused, int ig2 unused) |
926 | 926 | { |
927 | - ctlr_clear(False); | |
927 | + ctlr_clear(&h3270,False); | |
928 | 928 | return DATA; |
929 | 929 | } |
930 | 930 | |
... | ... | @@ -1443,7 +1443,7 @@ dec_set(int ig1 unused, int ig2 unused) |
1443 | 1443 | rev_wraparound_mode = 1; |
1444 | 1444 | break; |
1445 | 1445 | case 47: /* alt buffer */ |
1446 | - ctlr_altbuffer(True); | |
1446 | + ctlr_altbuffer(&h3270,True); | |
1447 | 1447 | break; |
1448 | 1448 | } |
1449 | 1449 | return DATA; |
... | ... | @@ -1475,7 +1475,7 @@ dec_reset(int ig1 unused, int ig2 unused) |
1475 | 1475 | rev_wraparound_mode = 0; |
1476 | 1476 | break; |
1477 | 1477 | case 47: /* alt buffer */ |
1478 | - ctlr_altbuffer(False); | |
1478 | + ctlr_altbuffer(&h3270,False); | |
1479 | 1479 | break; |
1480 | 1480 | } |
1481 | 1481 | return DATA; |
... | ... | @@ -1504,7 +1504,7 @@ dec_save(int ig1 unused, int ig2 unused) |
1504 | 1504 | saved_rev_wraparound_mode = rev_wraparound_mode; |
1505 | 1505 | break; |
1506 | 1506 | case 47: /* alt buffer */ |
1507 | - saved_altbuffer = is_altbuffer; | |
1507 | + saved_altbuffer = h3270.is_altbuffer; | |
1508 | 1508 | break; |
1509 | 1509 | } |
1510 | 1510 | return DATA; |
... | ... | @@ -1539,7 +1539,7 @@ dec_restore(int ig1 unused, int ig2 unused) |
1539 | 1539 | rev_wraparound_mode = saved_rev_wraparound_mode; |
1540 | 1540 | break; |
1541 | 1541 | case 47: /* alt buffer */ |
1542 | - ctlr_altbuffer(saved_altbuffer); | |
1542 | + ctlr_altbuffer(&h3270,saved_altbuffer); | |
1543 | 1543 | break; |
1544 | 1544 | } |
1545 | 1545 | return DATA; |
... | ... | @@ -1664,7 +1664,7 @@ ansi_scroll(void) |
1664 | 1664 | |
1665 | 1665 | /* Save the top line */ |
1666 | 1666 | if (scroll_top == 1 && scroll_bottom == h3270.rows) { |
1667 | - if (!is_altbuffer) | |
1667 | + if (!h3270.is_altbuffer) | |
1668 | 1668 | scroll_save(1, False); |
1669 | 1669 | ctlr_scroll(); |
1670 | 1670 | return; | ... | ... |
latest/src/lib/ctlr.c
... | ... | @@ -77,13 +77,13 @@ extern unsigned char aid; |
77 | 77 | // int cursor_addr; |
78 | 78 | |
79 | 79 | int buffer_addr; |
80 | -Boolean screen_alt = False; /* alternate screen? */ | |
81 | -Boolean is_altbuffer = False; | |
80 | +// Boolean screen_alt = False; /* alternate screen? */ | |
81 | +// Boolean is_altbuffer = False; | |
82 | 82 | |
83 | 83 | struct ea *ea_buf = NULL; /* 3270 device buffer */ |
84 | 84 | /* ea_buf[-1] is the dummy default field attribute */ |
85 | 85 | |
86 | -Boolean formatted = False; /* set in screen_disp */ | |
86 | +// Boolean formatted = False; /* set in screen_disp */ | |
87 | 87 | unsigned char reply_mode = SF_SRM_FIELD; |
88 | 88 | int crm_nattr = 0; |
89 | 89 | unsigned char crm_attr[16]; |
... | ... | @@ -92,7 +92,7 @@ Boolean dbcs = False; |
92 | 92 | /* Statics */ |
93 | 93 | static struct ea *aea_buf; /* alternate 3270 extended attribute buffer */ |
94 | 94 | static unsigned char *zero_buf; /* empty buffer, for area clears */ |
95 | -static void set_formatted(void); | |
95 | +static void set_formatted(H3270 *session); | |
96 | 96 | static void ctlr_blanks(void); |
97 | 97 | static Boolean trace_primed = False; |
98 | 98 | static unsigned char default_fg; |
... | ... | @@ -251,7 +251,7 @@ void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ovr) |
251 | 251 | // Make sure that the current rows/cols are still 24x80. |
252 | 252 | session->cols = 80; |
253 | 253 | session->rows = 24; |
254 | - screen_alt = False; | |
254 | + session->screen_alt = False; | |
255 | 255 | |
256 | 256 | } |
257 | 257 | |
... | ... | @@ -260,16 +260,19 @@ void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ovr) |
260 | 260 | * Set the formatted screen flag. A formatted screen is a screen that |
261 | 261 | * has at least one field somewhere on it. |
262 | 262 | */ |
263 | -static void | |
264 | -set_formatted(void) | |
263 | +static void set_formatted(H3270 *session) | |
265 | 264 | { |
266 | - register int baddr; | |
265 | + register int baddr; | |
267 | 266 | |
268 | - formatted = False; | |
267 | + CHECK_SESSION_HANDLE(session); | |
268 | + | |
269 | + session->formatted = False; | |
269 | 270 | baddr = 0; |
270 | - do { | |
271 | - if (ea_buf[baddr].fa) { | |
272 | - formatted = True; | |
271 | + do | |
272 | + { | |
273 | + if (ea_buf[baddr].fa) | |
274 | + { | |
275 | + session->formatted = True; | |
273 | 276 | break; |
274 | 277 | } |
275 | 278 | INC_BA(baddr); |
... | ... | @@ -288,8 +291,7 @@ static void ctlr_half_connect(H3270 *session, int ignored unused, void *dunno) |
288 | 291 | /* |
289 | 292 | * Called when a host connects, disconnects, or changes ANSI/3270 modes. |
290 | 293 | */ |
291 | -static void | |
292 | -ctlr_connect(H3270 *session, int ignored unused, void *dunno) | |
294 | +static void ctlr_connect(H3270 *session, int ignored unused, void *dunno) | |
293 | 295 | { |
294 | 296 | ticking_stop(session); |
295 | 297 | status_untiming(session); |
... | ... | @@ -318,12 +320,13 @@ ctlr_connect(H3270 *session, int ignored unused, void *dunno) |
318 | 320 | * Find the buffer address of the field attribute for a given buffer address. |
319 | 321 | * Returns -1 if the screen isn't formatted. |
320 | 322 | */ |
321 | -int | |
322 | -find_field_attribute(int baddr) | |
323 | +int find_field_attribute(H3270 *h, int baddr) | |
323 | 324 | { |
324 | 325 | int sbaddr; |
325 | 326 | |
326 | - if (!formatted) | |
327 | + CHECK_SESSION_HANDLE(h); | |
328 | + | |
329 | + if (!h->formatted) | |
327 | 330 | return -1; |
328 | 331 | |
329 | 332 | sbaddr = baddr; |
... | ... | @@ -338,12 +341,16 @@ find_field_attribute(int baddr) |
338 | 341 | /* |
339 | 342 | * Get Field width |
340 | 343 | */ |
341 | -int find_field_length(int baddr) | |
344 | +int find_field_length(H3270 *h, int baddr) | |
342 | 345 | { |
343 | 346 | int saddr; |
344 | - int addr = find_field_attribute(baddr); | |
347 | + int addr; | |
345 | 348 | int width = 0; |
346 | 349 | |
350 | + CHECK_SESSION_HANDLE(h); | |
351 | + | |
352 | + addr = find_field_attribute(h,baddr); | |
353 | + | |
347 | 354 | if(addr < 0) |
348 | 355 | return -1; |
349 | 356 | |
... | ... | @@ -364,10 +371,10 @@ int find_field_length(int baddr) |
364 | 371 | * Find the field attribute for the given buffer address. Return its address |
365 | 372 | * rather than its value. |
366 | 373 | */ |
367 | -unsigned char | |
368 | -get_field_attribute(int baddr) | |
374 | +unsigned char get_field_attribute(H3270 *h, int baddr) | |
369 | 375 | { |
370 | - return ea_buf[find_field_attribute(baddr)].fa; | |
376 | + CHECK_SESSION_HANDLE(h); | |
377 | + return ea_buf[find_field_attribute(h,baddr)].fa; | |
371 | 378 | } |
372 | 379 | |
373 | 380 | /* |
... | ... | @@ -382,7 +389,7 @@ get_bounded_field_attribute(register int baddr, register int bound, |
382 | 389 | { |
383 | 390 | int sbaddr; |
384 | 391 | |
385 | - if (!formatted) { | |
392 | + if (!h3270.formatted) { | |
386 | 393 | *fa_out = ea_buf[-1].fa; |
387 | 394 | return True; |
388 | 395 | } |
... | ... | @@ -442,36 +449,39 @@ next_unprotected(int baddr0) |
442 | 449 | * Perform an erase command, which may include changing the (virtual) screen |
443 | 450 | * size. |
444 | 451 | */ |
445 | -void | |
446 | -ctlr_erase(int alt) | |
452 | +void ctlr_erase(H3270 *session, int alt) | |
447 | 453 | { |
448 | - kybd_inhibit(False); | |
454 | + CHECK_SESSION_HANDLE(session); | |
449 | 455 | |
450 | - ctlr_clear(True); | |
451 | - screen_erase(&h3270); | |
456 | + kybd_inhibit(False); | |
452 | 457 | |
453 | - /* Let a script go. */ | |
454 | -// sms_host_output(); | |
458 | + ctlr_clear(session,True); | |
459 | + screen_erase(session); | |
455 | 460 | |
456 | - if (alt == screen_alt) | |
461 | + if(alt == session->screen_alt) | |
457 | 462 | return; |
458 | 463 | |
459 | - if (alt) { | |
464 | + if (alt) | |
465 | + { | |
460 | 466 | /* Going from 24x80 to maximum. */ |
461 | - screen_disp(&h3270); | |
462 | - set_viewsize(&h3270,h3270.maxROWS,h3270.maxCOLS); | |
463 | - } else { | |
467 | + screen_disp(session); | |
468 | + set_viewsize(session,session->maxROWS,session->maxCOLS); | |
469 | + } | |
470 | + else | |
471 | + { | |
464 | 472 | /* Going from maximum to 24x80. */ |
465 | - if (h3270.maxROWS > 24 || h3270.maxCOLS > 80) { | |
466 | - if (visible_control) { | |
473 | + if (session->maxROWS > 24 || session->maxCOLS > 80) | |
474 | + { | |
475 | + if (visible_control) | |
476 | + { | |
467 | 477 | ctlr_blanks(); |
468 | - screen_disp(&h3270); | |
478 | + screen_disp(session); | |
469 | 479 | } |
470 | - set_viewsize(&h3270,24,80); | |
480 | + set_viewsize(session,24,80); | |
471 | 481 | } |
472 | 482 | } |
473 | 483 | |
474 | - screen_alt = alt; | |
484 | + session->screen_alt = alt; | |
475 | 485 | } |
476 | 486 | |
477 | 487 | |
... | ... | @@ -500,7 +510,7 @@ process_ds(unsigned char *buf, int buflen) |
500 | 510 | case CMD_EWA: /* erase/write alternate */ |
501 | 511 | case SNA_CMD_EWA: |
502 | 512 | trace_ds("EraseWriteAlternate"); |
503 | - ctlr_erase(True); | |
513 | + ctlr_erase(NULL,True); | |
504 | 514 | if ((rv = ctlr_write(buf, buflen, True)) < 0) |
505 | 515 | return rv; |
506 | 516 | return PDS_OKAY_NO_OUTPUT; |
... | ... | @@ -508,7 +518,7 @@ process_ds(unsigned char *buf, int buflen) |
508 | 518 | case CMD_EW: /* erase/write */ |
509 | 519 | case SNA_CMD_EW: |
510 | 520 | trace_ds("EraseWrite"); |
511 | - ctlr_erase(False); | |
521 | + ctlr_erase(NULL,False); | |
512 | 522 | if ((rv = ctlr_write(buf, buflen, True)) < 0) |
513 | 523 | return rv; |
514 | 524 | return PDS_OKAY_NO_OUTPUT; |
... | ... | @@ -685,7 +695,7 @@ ctlr_read_modified(unsigned char aid_byte, Boolean all) |
685 | 695 | } |
686 | 696 | |
687 | 697 | baddr = 0; |
688 | - if (formatted) { | |
698 | + if (h3270.formatted) { | |
689 | 699 | /* find first field attribute */ |
690 | 700 | do { |
691 | 701 | if (ea_buf[baddr].fa) |
... | ... | @@ -934,7 +944,7 @@ ctlr_snap_buffer(void) |
934 | 944 | unsigned char av; |
935 | 945 | |
936 | 946 | space3270out(2); |
937 | - *obptr++ = screen_alt ? CMD_EWA : CMD_EW; | |
947 | + *obptr++ = h3270.screen_alt ? CMD_EWA : CMD_EW; | |
938 | 948 | *obptr++ = code_table[0]; |
939 | 949 | |
940 | 950 | do { |
... | ... | @@ -1061,7 +1071,7 @@ ctlr_erase_all_unprotected(void) |
1061 | 1071 | |
1062 | 1072 | kybd_inhibit(False); |
1063 | 1073 | |
1064 | - if (formatted) { | |
1074 | + if (h3270.formatted) { | |
1065 | 1075 | /* find first field attribute */ |
1066 | 1076 | baddr = 0; |
1067 | 1077 | do { |
... | ... | @@ -1095,7 +1105,7 @@ ctlr_erase_all_unprotected(void) |
1095 | 1105 | if (!f) |
1096 | 1106 | cursor_move(0); |
1097 | 1107 | } else { |
1098 | - ctlr_clear(True); | |
1108 | + ctlr_clear(&h3270,True); | |
1099 | 1109 | } |
1100 | 1110 | aid = AID_NO; |
1101 | 1111 | do_reset(False); |
... | ... | @@ -1151,7 +1161,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) |
1151 | 1161 | ctlr_add_gr(buffer_addr, 0); \ |
1152 | 1162 | ctlr_add_ic(buffer_addr, 0); \ |
1153 | 1163 | trace_ds("%s",see_attr(fa)); \ |
1154 | - formatted = True; \ | |
1164 | + h3270.formatted = True; \ | |
1155 | 1165 | } |
1156 | 1166 | |
1157 | 1167 | kybd_inhibit(False); |
... | ... | @@ -1203,7 +1213,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) |
1203 | 1213 | |
1204 | 1214 | last_cmd = True; |
1205 | 1215 | last_zpt = False; |
1206 | - current_fa = get_field_attribute(buffer_addr); | |
1216 | + current_fa = get_field_attribute(&h3270,buffer_addr); | |
1207 | 1217 | |
1208 | 1218 | #define ABORT_WRITEx { \ |
1209 | 1219 | rv = PDS_BAD_ADDR; \ |
... | ... | @@ -1239,7 +1249,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) |
1239 | 1249 | if (buffer_addr >= h3270.cols * h3270.rows) { |
1240 | 1250 | ABORT_WRITE("invalid SBA address"); |
1241 | 1251 | } |
1242 | - current_fa = get_field_attribute(buffer_addr); | |
1252 | + current_fa = get_field_attribute(&h3270,buffer_addr); | |
1243 | 1253 | last_cmd = True; |
1244 | 1254 | last_zpt = False; |
1245 | 1255 | break; |
... | ... | @@ -1399,7 +1409,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) |
1399 | 1409 | INC_BA(buffer_addr); |
1400 | 1410 | } |
1401 | 1411 | } while (buffer_addr != baddr); |
1402 | - current_fa = get_field_attribute(buffer_addr); | |
1412 | + current_fa = get_field_attribute(&h3270,buffer_addr); | |
1403 | 1413 | last_cmd = True; |
1404 | 1414 | last_zpt = False; |
1405 | 1415 | break; |
... | ... | @@ -1430,7 +1440,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) |
1430 | 1440 | } |
1431 | 1441 | INC_BA(buffer_addr); |
1432 | 1442 | } while (buffer_addr != baddr); |
1433 | - current_fa = get_field_attribute(buffer_addr); | |
1443 | + current_fa = get_field_attribute(&h3270,buffer_addr); | |
1434 | 1444 | last_cmd = True; |
1435 | 1445 | last_zpt = False; |
1436 | 1446 | break; |
... | ... | @@ -1450,7 +1460,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) |
1450 | 1460 | ctlr_add_gr(buffer_addr, default_gr); |
1451 | 1461 | ctlr_add_ic(buffer_addr, default_ic); |
1452 | 1462 | INC_BA(buffer_addr); |
1453 | - current_fa = get_field_attribute(buffer_addr); | |
1463 | + current_fa = get_field_attribute(&h3270,buffer_addr); | |
1454 | 1464 | last_cmd = False; |
1455 | 1465 | last_zpt = False; |
1456 | 1466 | break; |
... | ... | @@ -1697,7 +1707,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) |
1697 | 1707 | if (d != DBCS_NONE && why == DBCS_FIELD) { |
1698 | 1708 | ABORT_WRITE("SI in DBCS field"); |
1699 | 1709 | } |
1700 | - fa_addr = find_field_attribute(buffer_addr); | |
1710 | + fa_addr = find_field_attribute(&h3270,buffer_addr); | |
1701 | 1711 | baddr = buffer_addr; |
1702 | 1712 | DEC_BA(baddr); |
1703 | 1713 | while (!aborted && |
... | ... | @@ -1849,7 +1859,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) |
1849 | 1859 | break; |
1850 | 1860 | } |
1851 | 1861 | } |
1852 | - set_formatted(); | |
1862 | + set_formatted(&h3270); | |
1853 | 1863 | END_TEXT0; |
1854 | 1864 | trace_ds("\n"); |
1855 | 1865 | if (wcc_keyboard_restore) { |
... | ... | @@ -2278,8 +2288,8 @@ ps_process(void) |
2278 | 2288 | #if defined(X3270_FT) /*[*/ |
2279 | 2289 | /* Process file transfers. */ |
2280 | 2290 | if (ft_state != FT_NONE && /* transfer in progress */ |
2281 | - formatted && /* screen is formatted */ | |
2282 | - !screen_alt && /* 24x80 screen */ | |
2291 | + h3270.formatted && /* screen is formatted */ | |
2292 | + !h3270.screen_alt && /* 24x80 screen */ | |
2283 | 2293 | !kybdlock && /* keyboard not locked */ |
2284 | 2294 | /* magic field */ |
2285 | 2295 | ea_buf[1919].fa && FA_IS_SKIP(ea_buf[1919].fa)) { |
... | ... | @@ -2308,7 +2318,7 @@ ctlr_any_data(void) |
2308 | 2318 | * and buffer addresses and extended attributes. |
2309 | 2319 | */ |
2310 | 2320 | void |
2311 | -ctlr_clear(Boolean can_snap) | |
2321 | +ctlr_clear(H3270 *session, Boolean can_snap) | |
2312 | 2322 | { |
2313 | 2323 | /* Snap any data that is about to be lost into the trace file. */ |
2314 | 2324 | if (ctlr_any_data()) { |
... | ... | @@ -2316,18 +2326,18 @@ ctlr_clear(Boolean can_snap) |
2316 | 2326 | if (can_snap && !trace_skipping && toggled(SCREEN_TRACE)) |
2317 | 2327 | trace_screen(); |
2318 | 2328 | #endif /*]*/ |
2319 | - scroll_save(maxROWS, ever_3270 ? False : True); | |
2329 | + scroll_save(session->maxROWS, ever_3270 ? False : True); | |
2320 | 2330 | } |
2321 | 2331 | #if defined(X3270_TRACE) /*[*/ |
2322 | 2332 | trace_skipping = False; |
2323 | 2333 | #endif /*]*/ |
2324 | 2334 | |
2325 | 2335 | /* Clear the screen. */ |
2326 | - (void) memset((char *)ea_buf, 0, h3270.rows*h3270.cols*sizeof(struct ea)); | |
2336 | + (void) memset((char *)ea_buf, 0, session->rows*session->cols*sizeof(struct ea)); | |
2327 | 2337 | cursor_move(0); |
2328 | 2338 | buffer_addr = 0; |
2329 | 2339 | // unselect(0, ROWS*COLS); |
2330 | - formatted = False; | |
2340 | + session->formatted = False; | |
2331 | 2341 | default_fg = 0; |
2332 | 2342 | default_bg = 0; |
2333 | 2343 | default_gr = 0; |
... | ... | @@ -2335,7 +2345,7 @@ ctlr_clear(Boolean can_snap) |
2335 | 2345 | sscp_start = 0; |
2336 | 2346 | |
2337 | 2347 | // ALL_CHANGED; |
2338 | - screen_erase(&h3270); | |
2348 | + screen_erase(session); | |
2339 | 2349 | |
2340 | 2350 | } |
2341 | 2351 | |
... | ... | @@ -2354,7 +2364,7 @@ ctlr_blanks(void) |
2354 | 2364 | cursor_move(0); |
2355 | 2365 | buffer_addr = 0; |
2356 | 2366 | // unselect(0, ROWS*COLS); |
2357 | - formatted = False; | |
2367 | + h3270.formatted = False; | |
2358 | 2368 | ALL_CHANGED; |
2359 | 2369 | } |
2360 | 2370 | |
... | ... | @@ -2376,7 +2386,7 @@ ctlr_add(int baddr, unsigned char c, unsigned char cs) |
2376 | 2386 | if (toggled(SCREEN_TRACE)) |
2377 | 2387 | trace_screen(); |
2378 | 2388 | #endif /*]*/ |
2379 | - scroll_save(maxROWS, False); | |
2389 | + scroll_save(session->maxROWS, False); | |
2380 | 2390 | trace_primed = False; |
2381 | 2391 | } |
2382 | 2392 | /* |
... | ... | @@ -2622,22 +2632,23 @@ void changed(H3270 *session, int bstart, int bend) |
2622 | 2632 | |
2623 | 2633 | } |
2624 | 2634 | |
2625 | -#if defined(X3270_ANSI) /*[*/ | |
2626 | 2635 | /* |
2627 | 2636 | * Swap the regular and alternate screen buffers |
2628 | 2637 | */ |
2629 | -void | |
2630 | -ctlr_altbuffer(Boolean alt) | |
2638 | +void ctlr_altbuffer(H3270 *session, int alt) | |
2631 | 2639 | { |
2632 | 2640 | struct ea *etmp; |
2633 | 2641 | |
2634 | - if (alt != is_altbuffer) { | |
2642 | + CHECK_SESSION_HANDLE(session); | |
2643 | + | |
2644 | + if (alt != session->is_altbuffer) | |
2645 | + { | |
2635 | 2646 | |
2636 | 2647 | etmp = ea_buf; |
2637 | 2648 | ea_buf = aea_buf; |
2638 | 2649 | aea_buf = etmp; |
2639 | 2650 | |
2640 | - is_altbuffer = alt; | |
2651 | + session->is_altbuffer = alt; | |
2641 | 2652 | ALL_CHANGED; |
2642 | 2653 | // unselect(0, ROWS*COLS); |
2643 | 2654 | |
... | ... | @@ -2648,7 +2659,6 @@ ctlr_altbuffer(Boolean alt) |
2648 | 2659 | blink_start(); |
2649 | 2660 | } |
2650 | 2661 | } |
2651 | -#endif /*]*/ | |
2652 | 2662 | |
2653 | 2663 | |
2654 | 2664 | /* |
... | ... | @@ -2659,7 +2669,7 @@ mdt_set(int baddr) |
2659 | 2669 | { |
2660 | 2670 | int faddr; |
2661 | 2671 | |
2662 | - faddr = find_field_attribute(baddr); | |
2672 | + faddr = find_field_attribute(&h3270,baddr); | |
2663 | 2673 | if (faddr >= 0 && !(ea_buf[faddr].fa & FA_MODIFY)) { |
2664 | 2674 | ea_buf[faddr].fa |= FA_MODIFY; |
2665 | 2675 | if (appres.modified_sel) |
... | ... | @@ -2672,7 +2682,7 @@ mdt_clear(int baddr) |
2672 | 2682 | { |
2673 | 2683 | int faddr; |
2674 | 2684 | |
2675 | - faddr = find_field_attribute(baddr); | |
2685 | + faddr = find_field_attribute(&h3270,baddr); | |
2676 | 2686 | if (faddr >= 0 && (ea_buf[faddr].fa & FA_MODIFY)) { |
2677 | 2687 | ea_buf[faddr].fa &= ~FA_MODIFY; |
2678 | 2688 | if (appres.modified_sel) | ... | ... |
latest/src/lib/ctlr.h
... | ... | @@ -20,5 +20,5 @@ |
20 | 20 | LIB3270_INTERNAL int buffer_addr; /**< buffer address */ |
21 | 21 | LIB3270_INTERNAL int cursor_addr; /**< cursor address */ |
22 | 22 | LIB3270_INTERNAL struct ea *ea_buf; /**< 3270 device buffer */ |
23 | -LIB3270_INTERNAL Boolean formatted; /**< contains at least one field? */ | |
24 | -LIB3270_INTERNAL Boolean is_altbuffer; /**< in alternate-buffer mode? */ | |
23 | +//LIB3270_INTERNAL Boolean formatted; /**< contains at least one field? */ | |
24 | +//LIB3270_INTERNAL Boolean is_altbuffer; /**< in alternate-buffer mode? */ | ... | ... |
latest/src/lib/ctlrc.h
... | ... | @@ -31,11 +31,11 @@ LIB3270_INTERNAL void ctlr_add_cs(int baddr, unsigned char cs); |
31 | 31 | LIB3270_INTERNAL void ctlr_add_fa(int baddr, unsigned char fa, unsigned char cs); |
32 | 32 | LIB3270_INTERNAL void ctlr_add_fg(int baddr, unsigned char color); |
33 | 33 | LIB3270_INTERNAL void ctlr_add_gr(int baddr, unsigned char gr); |
34 | -LIB3270_INTERNAL void ctlr_altbuffer(Boolean alt); | |
34 | +LIB3270_INTERNAL void ctlr_altbuffer(H3270 *session, int alt); | |
35 | 35 | LIB3270_INTERNAL Boolean ctlr_any_data(void); |
36 | 36 | LIB3270_INTERNAL void ctlr_bcopy(int baddr_from, int baddr_to, int count, int move_ea); |
37 | 37 | // LIB3270_INTERNAL void ctlr_changed(int bstart, int bend); |
38 | -LIB3270_INTERNAL void ctlr_clear(Boolean can_snap); | |
38 | +LIB3270_INTERNAL void ctlr_clear(H3270 *session, Boolean can_snap); | |
39 | 39 | LIB3270_INTERNAL void ctlr_erase_all_unprotected(void); |
40 | 40 | LIB3270_INTERNAL void ctlr_init(unsigned cmask); |
41 | 41 | LIB3270_INTERNAL void ctlr_read_buffer(unsigned char aid_byte); |
... | ... | @@ -59,6 +59,7 @@ LIB3270_INTERNAL void ps_process(void); |
59 | 59 | |
60 | 60 | LIB3270_INTERNAL void update_model_info(H3270 *session, int model, int cols, int rows); |
61 | 61 | LIB3270_INTERNAL void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ovr); |
62 | +LIB3270_INTERNAL void ctlr_erase(H3270 *session, int alt); | |
62 | 63 | |
63 | 64 | LIB3270_INTERNAL void ticking_start(H3270 *session, Boolean anyway); |
64 | 65 | LIB3270_INTERNAL void toggle_nop(struct toggle *t, enum toggle_type tt); | ... | ... |
latest/src/lib/globals.h
... | ... | @@ -203,10 +203,10 @@ LIB3270_INTERNAL char *hostname; |
203 | 203 | LIB3270_INTERNAL Boolean local_process; |
204 | 204 | #endif /*]*/ |
205 | 205 | |
206 | -LIB3270_INTERNAL int maxCOLS; | |
207 | -LIB3270_INTERNAL int maxROWS; | |
208 | -LIB3270_INTERNAL char *model_name; | |
209 | -LIB3270_INTERNAL int model_num; | |
206 | +// LIB3270_INTERNAL int maxCOLS; | |
207 | +// LIB3270_INTERNAL int maxROWS; | |
208 | +// LIB3270_INTERNAL char *model_name; | |
209 | +// LIB3270_INTERNAL int model_num; | |
210 | 210 | LIB3270_INTERNAL Boolean no_login_host; |
211 | 211 | LIB3270_INTERNAL Boolean non_tn3270e_host; |
212 | 212 | LIB3270_INTERNAL int ov_cols, ov_rows; | ... | ... |
latest/src/lib/kybd.c
... | ... | @@ -766,8 +766,8 @@ key_Character(int code, Boolean with_ge, Boolean pasting, Boolean *skipped) |
766 | 766 | return False; |
767 | 767 | } |
768 | 768 | baddr = h3270.cursor_addr; |
769 | - faddr = find_field_attribute(baddr); | |
770 | - fa = get_field_attribute(baddr); | |
769 | + faddr = find_field_attribute(&h3270,baddr); | |
770 | + fa = get_field_attribute(&h3270,baddr); | |
771 | 771 | if (ea_buf[baddr].fa || FA_IS_PROTECTED(fa)) { |
772 | 772 | operator_error(KL_OERR_PROTECTED); |
773 | 773 | return False; |
... | ... | @@ -919,7 +919,7 @@ key_Character(int code, Boolean with_ge, Boolean pasting, Boolean *skipped) |
919 | 919 | INC_BA(baddr); |
920 | 920 | |
921 | 921 | /* Replace leading nulls with blanks, if desired. */ |
922 | - if (formatted && toggled(BLANK_FILL)) { | |
922 | + if (h3270.formatted && toggled(BLANK_FILL)) { | |
923 | 923 | register int baddr_fill = baddr; |
924 | 924 | |
925 | 925 | DEC_BA(baddr_fill); |
... | ... | @@ -1602,7 +1602,7 @@ LIB3270_ACTION( firstfield ) |
1602 | 1602 | return 0; |
1603 | 1603 | } |
1604 | 1604 | #endif /*]*/ |
1605 | - if (!formatted) { | |
1605 | + if (!h3270.formatted) { | |
1606 | 1606 | cursor_move(0); |
1607 | 1607 | return 0; |
1608 | 1608 | } |
... | ... | @@ -1692,7 +1692,7 @@ do_delete(void) |
1692 | 1692 | baddr = h3270.cursor_addr; |
1693 | 1693 | |
1694 | 1694 | /* Can't delete a field attribute. */ |
1695 | - fa = get_field_attribute(baddr); | |
1695 | + fa = get_field_attribute(&h3270,baddr); | |
1696 | 1696 | if (FA_IS_PROTECTED(fa) || ea_buf[baddr].fa) { |
1697 | 1697 | operator_error(KL_OERR_PROTECTED); |
1698 | 1698 | return False; |
... | ... | @@ -1718,7 +1718,7 @@ do_delete(void) |
1718 | 1718 | ndel = 1; |
1719 | 1719 | |
1720 | 1720 | /* find next fa */ |
1721 | - if (formatted) { | |
1721 | + if (h3270.formatted) { | |
1722 | 1722 | end_baddr = baddr; |
1723 | 1723 | do { |
1724 | 1724 | INC_BA(end_baddr); |
... | ... | @@ -1826,7 +1826,7 @@ do_erase(void) |
1826 | 1826 | enum dbcs_state d; |
1827 | 1827 | |
1828 | 1828 | baddr = h3270.cursor_addr; |
1829 | - faddr = find_field_attribute(baddr); | |
1829 | + faddr = find_field_attribute(&h3270,baddr); | |
1830 | 1830 | if (faddr == baddr || FA_IS_PROTECTED(ea_buf[baddr].fa)) { |
1831 | 1831 | operator_error(KL_OERR_PROTECTED); |
1832 | 1832 | return; |
... | ... | @@ -1994,11 +1994,11 @@ LIB3270_ACTION( previousword ) |
1994 | 1994 | if (IN_ANSI) |
1995 | 1995 | return 0; |
1996 | 1996 | #endif /*]*/ |
1997 | - if (!formatted) | |
1997 | + if (!h3270.formatted) | |
1998 | 1998 | return 0; |
1999 | 1999 | |
2000 | 2000 | baddr = h3270.cursor_addr; |
2001 | - prot = FA_IS_PROTECTED(get_field_attribute(baddr)); | |
2001 | + prot = FA_IS_PROTECTED(get_field_attribute(&h3270,baddr)); | |
2002 | 2002 | |
2003 | 2003 | /* Skip to before this word, if in one now. */ |
2004 | 2004 | if (!prot) { |
... | ... | @@ -2017,7 +2017,7 @@ LIB3270_ACTION( previousword ) |
2017 | 2017 | c = ea_buf[baddr].cc; |
2018 | 2018 | if (ea_buf[baddr].fa) { |
2019 | 2019 | DEC_BA(baddr); |
2020 | - prot = FA_IS_PROTECTED(get_field_attribute(baddr)); | |
2020 | + prot = FA_IS_PROTECTED(get_field_attribute(&h3270,baddr)); | |
2021 | 2021 | continue; |
2022 | 2022 | } |
2023 | 2023 | if (!prot && c != EBC_space && c != EBC_null) |
... | ... | @@ -2087,7 +2087,7 @@ nu_word(int baddr) |
2087 | 2087 | unsigned char c; |
2088 | 2088 | Boolean prot; |
2089 | 2089 | |
2090 | - prot = FA_IS_PROTECTED(get_field_attribute(baddr)); | |
2090 | + prot = FA_IS_PROTECTED(get_field_attribute(&h3270,baddr)); | |
2091 | 2091 | |
2092 | 2092 | do { |
2093 | 2093 | c = ea_buf[baddr].cc; |
... | ... | @@ -2145,12 +2145,12 @@ LIB3270_ACTION( nextword ) |
2145 | 2145 | if (IN_ANSI) |
2146 | 2146 | return 0; |
2147 | 2147 | #endif /*]*/ |
2148 | - if (!formatted) | |
2148 | + if (!h3270.formatted) | |
2149 | 2149 | return 0; |
2150 | 2150 | |
2151 | 2151 | /* If not in an unprotected field, go to the next unprotected word. */ |
2152 | 2152 | if (ea_buf[h3270.cursor_addr].fa || |
2153 | - FA_IS_PROTECTED(get_field_attribute(h3270.cursor_addr))) { | |
2153 | + FA_IS_PROTECTED(get_field_attribute(&h3270,h3270.cursor_addr))) { | |
2154 | 2154 | baddr = nu_word(h3270.cursor_addr); |
2155 | 2155 | if (baddr != -1) |
2156 | 2156 | cursor_move(baddr); |
... | ... | @@ -2311,7 +2311,7 @@ LIB3270_CURSOR_ACTION( newline ) |
2311 | 2311 | #endif /*]*/ |
2312 | 2312 | baddr = (h3270.cursor_addr + h3270.cols) % (h3270.cols * h3270.rows); /* down */ |
2313 | 2313 | baddr = (baddr / h3270.cols) * h3270.cols; /* 1st col */ |
2314 | - faddr = find_field_attribute(baddr); | |
2314 | + faddr = find_field_attribute(&h3270,baddr); | |
2315 | 2315 | fa = ea_buf[faddr].fa; |
2316 | 2316 | if (faddr != baddr && !FA_IS_PROTECTED(fa)) |
2317 | 2317 | cursor_move(baddr); |
... | ... | @@ -2426,7 +2426,7 @@ LIB3270_ACTION( clear ) |
2426 | 2426 | } |
2427 | 2427 | #endif /*]*/ |
2428 | 2428 | buffer_addr = 0; |
2429 | - ctlr_clear(True); | |
2429 | + ctlr_clear(&h3270,True); | |
2430 | 2430 | cursor_move(0); |
2431 | 2431 | if (CONNECTED) |
2432 | 2432 | key_AID(AID_CLEAR); |
... | ... | @@ -2566,14 +2566,14 @@ LIB3270_ACTION( eraseeol ) |
2566 | 2566 | #endif /*]*/ |
2567 | 2567 | |
2568 | 2568 | baddr = h3270.cursor_addr; |
2569 | - fa = get_field_attribute(baddr); | |
2569 | + fa = get_field_attribute(&h3270,baddr); | |
2570 | 2570 | if (FA_IS_PROTECTED(fa) || ea_buf[baddr].fa) |
2571 | 2571 | { |
2572 | 2572 | operator_error(KL_OERR_PROTECTED); |
2573 | 2573 | return -1; |
2574 | 2574 | } |
2575 | 2575 | |
2576 | - if (formatted) | |
2576 | + if (h3270.formatted) | |
2577 | 2577 | { |
2578 | 2578 | /* erase to next field attribute or current line */ |
2579 | 2579 | do |
... | ... | @@ -2631,12 +2631,12 @@ LIB3270_ACTION( eraseeof ) |
2631 | 2631 | return 0; |
2632 | 2632 | #endif /*]*/ |
2633 | 2633 | baddr = h3270.cursor_addr; |
2634 | - fa = get_field_attribute(baddr); | |
2634 | + fa = get_field_attribute(&h3270,baddr); | |
2635 | 2635 | if (FA_IS_PROTECTED(fa) || ea_buf[baddr].fa) { |
2636 | 2636 | operator_error(KL_OERR_PROTECTED); |
2637 | 2637 | return -1; |
2638 | 2638 | } |
2639 | - if (formatted) { /* erase to next field attribute */ | |
2639 | + if (h3270.formatted) { /* erase to next field attribute */ | |
2640 | 2640 | do { |
2641 | 2641 | ctlr_add(baddr, EBC_null, 0); |
2642 | 2642 | INC_BA(baddr); |
... | ... | @@ -2679,7 +2679,7 @@ LIB3270_ACTION( eraseinput ) |
2679 | 2679 | if (IN_ANSI) |
2680 | 2680 | return 0; |
2681 | 2681 | #endif /*]*/ |
2682 | - if (formatted) { | |
2682 | + if (h3270.formatted) { | |
2683 | 2683 | /* find first field attribute */ |
2684 | 2684 | baddr = 0; |
2685 | 2685 | do { |
... | ... | @@ -2712,7 +2712,7 @@ LIB3270_ACTION( eraseinput ) |
2712 | 2712 | if (!f) |
2713 | 2713 | cursor_move(0); |
2714 | 2714 | } else { |
2715 | - ctlr_clear(True); | |
2715 | + ctlr_clear(&h3270,True); | |
2716 | 2716 | cursor_move(0); |
2717 | 2717 | } |
2718 | 2718 | screen_disp(&h3270); |
... | ... | @@ -2745,11 +2745,11 @@ LIB3270_ACTION( deleteword ) |
2745 | 2745 | return 0; |
2746 | 2746 | } |
2747 | 2747 | #endif /*]*/ |
2748 | - if (!formatted) | |
2748 | + if (!h3270.formatted) | |
2749 | 2749 | return 0; |
2750 | 2750 | |
2751 | 2751 | baddr = h3270.cursor_addr; |
2752 | - fa = get_field_attribute(baddr); | |
2752 | + fa = get_field_attribute(&h3270,baddr); | |
2753 | 2753 | |
2754 | 2754 | /* Make sure we're on a modifiable field. */ |
2755 | 2755 | if (FA_IS_PROTECTED(fa) || ea_buf[baddr].fa) { |
... | ... | @@ -2812,11 +2812,11 @@ LIB3270_ACTION( deletefield ) |
2812 | 2812 | return 0; |
2813 | 2813 | } |
2814 | 2814 | #endif /*]*/ |
2815 | - if (!formatted) | |
2815 | + if (!h3270.formatted) | |
2816 | 2816 | return 0; |
2817 | 2817 | |
2818 | 2818 | baddr = h3270.cursor_addr; |
2819 | - fa = get_field_attribute(baddr); | |
2819 | + fa = get_field_attribute(&h3270,baddr); | |
2820 | 2820 | if (FA_IS_PROTECTED(fa) || ea_buf[baddr].fa) { |
2821 | 2821 | operator_error(KL_OERR_PROTECTED); |
2822 | 2822 | return -1; |
... | ... | @@ -2916,10 +2916,10 @@ LIB3270_ACTION( fieldend ) |
2916 | 2916 | if (IN_ANSI) |
2917 | 2917 | return 0; |
2918 | 2918 | #endif /*]*/ |
2919 | - if (!formatted) | |
2919 | + if (!h3270.formatted) | |
2920 | 2920 | return 0; |
2921 | 2921 | baddr = h3270.cursor_addr; |
2922 | - faddr = find_field_attribute(baddr); | |
2922 | + faddr = find_field_attribute(&h3270,baddr); | |
2923 | 2923 | fa = ea_buf[faddr].fa; |
2924 | 2924 | if (faddr == baddr || FA_IS_PROTECTED(fa)) |
2925 | 2925 | return 0; |
... | ... | @@ -3299,7 +3299,7 @@ remargin(int lmargin) |
3299 | 3299 | b0 = baddr; |
3300 | 3300 | ever = True; |
3301 | 3301 | } |
3302 | - faddr = find_field_attribute(baddr); | |
3302 | + faddr = find_field_attribute(&h3270,baddr); | |
3303 | 3303 | fa = ea_buf[faddr].fa; |
3304 | 3304 | if (faddr == baddr || FA_IS_PROTECTED(fa)) { |
3305 | 3305 | baddr = next_unprotected(baddr); |
... | ... | @@ -3855,10 +3855,10 @@ kybd_prime(void) |
3855 | 3855 | * No point in trying if the screen isn't formatted, the keyboard |
3856 | 3856 | * is locked, or we aren't in 3270 mode. |
3857 | 3857 | */ |
3858 | - if (!formatted || kybdlock || !IN_3270) | |
3858 | + if (!h3270.formatted || kybdlock || !IN_3270) | |
3859 | 3859 | return 0; |
3860 | 3860 | |
3861 | - fa = get_field_attribute(h3270.cursor_addr); | |
3861 | + fa = get_field_attribute(&h3270,h3270.cursor_addr); | |
3862 | 3862 | if (ea_buf[h3270.cursor_addr].fa || FA_IS_PROTECTED(fa)) { |
3863 | 3863 | /* |
3864 | 3864 | * The cursor is not in an unprotected field. Find the | ... | ... |
latest/src/lib/paste.c
... | ... | @@ -111,7 +111,7 @@ |
111 | 111 | ever = True; |
112 | 112 | } |
113 | 113 | |
114 | - faddr = find_field_attribute(baddr); | |
114 | + faddr = find_field_attribute(&h3270,baddr); | |
115 | 115 | fa = ea_buf[faddr].fa; |
116 | 116 | if (faddr == baddr || FA_IS_PROTECTED(fa)) |
117 | 117 | { |
... | ... | @@ -132,7 +132,7 @@ |
132 | 132 | |
133 | 133 | if(toggled(SMART_PASTE)) |
134 | 134 | { |
135 | - int faddr = find_field_attribute(h3270.cursor_addr); | |
135 | + int faddr = find_field_attribute(&h3270,h3270.cursor_addr); | |
136 | 136 | if(FA_IS_PROTECTED(ea_buf[faddr].fa)) |
137 | 137 | h3270.cursor_addr++; |
138 | 138 | else |
... | ... | @@ -190,7 +190,7 @@ LIB3270_EXPORT int lib3270_set_string(H3270 *h, const unsigned char *str) |
190 | 190 | { |
191 | 191 | baddr = (h->cursor_addr + h->cols) % (h->cols * h->rows); /* down */ |
192 | 192 | baddr = (baddr / h->cols) * h->cols; /* 1st col */ |
193 | - faddr = find_field_attribute(baddr); | |
193 | + faddr = find_field_attribute(h,baddr); | |
194 | 194 | fa = ea_buf[faddr].fa; |
195 | 195 | if (faddr != baddr && !FA_IS_PROTECTED(fa)) |
196 | 196 | cursor_move(baddr); | ... | ... |
latest/src/lib/print.c
... | ... | @@ -150,7 +150,7 @@ fprint_screen(FILE *f, Boolean even_if_empty, Boolean use_html) |
150 | 150 | int ns = 0; |
151 | 151 | int nr = 0; |
152 | 152 | Boolean any = False; |
153 | - int fa_addr = find_field_attribute(0); | |
153 | + int fa_addr = find_field_attribute(&h3270,0); | |
154 | 154 | unsigned char fa = ea_buf[fa_addr].fa; |
155 | 155 | int fa_color, current_color; |
156 | 156 | Bool fa_high, current_high; | ... | ... |
latest/src/lib/screen.c
... | ... | @@ -99,11 +99,19 @@ void set_display_charset(char *dcs) |
99 | 99 | callbacks->charset(dcs); |
100 | 100 | } |
101 | 101 | |
102 | +/* | |
102 | 103 | static void addch(int row, int col, int c, int attr) |
103 | 104 | { |
104 | 105 | if(callbacks && callbacks->addch) |
105 | 106 | callbacks->addch(row, col, c, attr); |
106 | 107 | } |
108 | +*/ | |
109 | + | |
110 | +static void addch(H3270 *session, int baddr, unsigned short c, int attr) | |
111 | +{ | |
112 | + if(callbacks && callbacks->addch) | |
113 | + callbacks->addch(baddr/session->cols, baddr%session->cols, c, attr); | |
114 | +} | |
107 | 115 | |
108 | 116 | /** |
109 | 117 | * Initialize the screen. |
... | ... | @@ -141,8 +149,6 @@ int screen_init(H3270 *session) |
141 | 149 | // if (ab_mode == TS_AUTO) |
142 | 150 | // ab_mode = appres.m3279? TS_ON: TS_OFF; |
143 | 151 | |
144 | - /* Pull in the user's color mappings. */ | |
145 | - | |
146 | 152 | /* Set up the controller. */ |
147 | 153 | ctlr_init(-1); |
148 | 154 | ctlr_reinit(session,-1); |
... | ... | @@ -298,7 +304,7 @@ void update_model_info(H3270 *session, int model, int cols, int rows) |
298 | 304 | /* Get screen contents */ |
299 | 305 | int screen_read(char *dest, int baddr, int count) |
300 | 306 | { |
301 | - unsigned char fa = get_field_attribute(baddr); | |
307 | + unsigned char fa = get_field_attribute(&h3270,baddr); | |
302 | 308 | int max = (h3270.maxROWS * h3270.maxCOLS); |
303 | 309 | |
304 | 310 | *dest = 0; |
... | ... | @@ -333,20 +339,15 @@ int screen_read(char *dest, int baddr, int count) |
333 | 339 | static void screen_update(H3270 *session, int bstart, int bend) |
334 | 340 | { |
335 | 341 | |
336 | - int baddr, row, col; | |
342 | + int baddr; | |
337 | 343 | unsigned short a; |
338 | 344 | int attr = COLOR_GREEN; |
339 | 345 | unsigned char fa; |
340 | 346 | int fa_addr; |
341 | 347 | |
342 | - fa = get_field_attribute(bstart); | |
348 | + fa = get_field_attribute(session,bstart); | |
343 | 349 | a = color_from_fa(fa); |
344 | - fa_addr = find_field_attribute(bstart); // may be -1, that's okay | |
345 | - | |
346 | - row = bstart/session->cols; | |
347 | - col = bstart%session->cols; | |
348 | - | |
349 | - Trace("Update@%d-%d (%d,%d): [%c]",bstart,bend,row,col,ebc2asc[ea_buf[bstart].cc]); | |
350 | + fa_addr = find_field_attribute(session,bstart); // may be -1, that's okay | |
350 | 351 | |
351 | 352 | for(baddr = bstart; baddr <= bend; baddr++) |
352 | 353 | { |
... | ... | @@ -356,12 +357,12 @@ static void screen_update(H3270 *session, int bstart, int bend) |
356 | 357 | fa_addr = baddr; |
357 | 358 | fa = ea_buf[baddr].fa; |
358 | 359 | a = calc_attrs(baddr, baddr, fa); |
359 | - addch(row,col,' ',(attr = COLOR_GREEN)|CHAR_ATTR_MARKER); | |
360 | + addch(session,baddr,' ',(attr = COLOR_GREEN)|CHAR_ATTR_MARKER); | |
360 | 361 | } |
361 | 362 | else if (FA_IS_ZERO(fa)) |
362 | 363 | { |
363 | 364 | // Blank. |
364 | - addch(row,col,' ',attr=a); | |
365 | + addch(session,baddr,' ',attr=a); | |
365 | 366 | } |
366 | 367 | else |
367 | 368 | { |
... | ... | @@ -384,27 +385,21 @@ static void screen_update(H3270 *session, int bstart, int bend) |
384 | 385 | |
385 | 386 | if (ea_buf[baddr].cs == CS_LINEDRAW) |
386 | 387 | { |
387 | - addch(row,col,ea_buf[baddr].cc,attr); | |
388 | + addch(session,baddr,ea_buf[baddr].cc,attr); | |
388 | 389 | } |
389 | 390 | else if (ea_buf[baddr].cs == CS_APL || (ea_buf[baddr].cs & CS_GE)) |
390 | 391 | { |
391 | - addch(row,col,ea_buf[baddr].cc,attr|CHAR_ATTR_CG); | |
392 | + addch(session,baddr,ea_buf[baddr].cc,attr|CHAR_ATTR_CG); | |
392 | 393 | } |
393 | 394 | else |
394 | 395 | { |
395 | 396 | if (toggled(MONOCASE)) |
396 | - addch(row,col,asc2uc[ebc2asc[ea_buf[baddr].cc]],attr); | |
397 | + addch(session,baddr,asc2uc[ebc2asc[ea_buf[baddr].cc]],attr); | |
397 | 398 | else |
398 | - addch(row,col,ebc2asc[ea_buf[baddr].cc],attr); | |
399 | + addch(session,baddr,ebc2asc[ea_buf[baddr].cc],attr); | |
399 | 400 | } |
400 | 401 | } |
401 | 402 | |
402 | - if(++col >= session->cols) | |
403 | - { | |
404 | - row++; | |
405 | - col=0; | |
406 | - } | |
407 | - | |
408 | 403 | } |
409 | 404 | } |
410 | 405 | |
... | ... | @@ -598,8 +593,10 @@ static void status_connect(H3270 *session, int connected, void *dunno) |
598 | 593 | { |
599 | 594 | STATUS_CODE id = STATUS_CODE_USER; |
600 | 595 | |
601 | - if (connected) { | |
596 | + ctlr_erase(session,1); | |
602 | 597 | |
598 | + if (connected) | |
599 | + { | |
603 | 600 | set_status(session,OIA_FLAG_BOXSOLID,IN_3270 && !IN_SSCP); |
604 | 601 | |
605 | 602 | if (kybdlock & KL_AWAITING_FIRST) |
... | ... | @@ -611,7 +608,9 @@ static void status_connect(H3270 *session, int connected, void *dunno) |
611 | 608 | set_status(session,OIA_FLAG_SECURE,session->secure_connection); |
612 | 609 | #endif /*]*/ |
613 | 610 | |
614 | - } else { | |
611 | + } | |
612 | + else | |
613 | + { | |
615 | 614 | set_status(session,OIA_FLAG_BOXSOLID,False); |
616 | 615 | set_status(session,OIA_FLAG_SECURE,False); |
617 | 616 | ... | ... |
latest/src/lib/sf.c
... | ... | @@ -65,7 +65,7 @@ |
65 | 65 | #include <lib3270/api.h> |
66 | 66 | |
67 | 67 | /* Externals: ctlr.c */ |
68 | -extern Boolean screen_alt; | |
68 | +// extern Boolean screen_alt; | |
69 | 69 | extern unsigned char reply_mode; |
70 | 70 | extern int crm_nattr; |
71 | 71 | extern unsigned char crm_attr[]; |
... | ... | @@ -380,11 +380,11 @@ sf_erase_reset(unsigned char buf[], int buflen) |
380 | 380 | switch (buf[3]) { |
381 | 381 | case SF_ER_DEFAULT: |
382 | 382 | trace_ds(" Default\n"); |
383 | - ctlr_erase(False); | |
383 | + ctlr_erase(NULL,False); | |
384 | 384 | break; |
385 | 385 | case SF_ER_ALT: |
386 | 386 | trace_ds(" Alternate\n"); |
387 | - ctlr_erase(True); | |
387 | + ctlr_erase(NULL,True); | |
388 | 388 | break; |
389 | 389 | default: |
390 | 390 | trace_ds(" unknown type 0x%02x\n", buf[3]); |
... | ... | @@ -509,13 +509,13 @@ sf_create_partition(unsigned char buf[], int buflen) |
509 | 509 | GET16(h, &buf[6]); |
510 | 510 | trace_ds(",h=%d", h); |
511 | 511 | } else |
512 | - h = maxROWS; | |
512 | + h = h3270.maxROWS; | |
513 | 513 | |
514 | 514 | if (buflen > 9) { |
515 | 515 | GET16(w, &buf[8]); |
516 | 516 | trace_ds(",w=%d", w); |
517 | 517 | } else |
518 | - w = maxCOLS; | |
518 | + w = h3270.maxCOLS; | |
519 | 519 | |
520 | 520 | if (buflen > 11) { |
521 | 521 | GET16(rv, &buf[10]); |
... | ... | @@ -533,13 +533,13 @@ sf_create_partition(unsigned char buf[], int buflen) |
533 | 533 | GET16(hv, &buf[14]); |
534 | 534 | trace_ds(",hv=%d", hv); |
535 | 535 | } else |
536 | - hv = (h > maxROWS)? maxROWS: h; | |
536 | + hv = (h > h3270.maxROWS)? h3270.maxROWS: h; | |
537 | 537 | |
538 | 538 | if (buflen > 17) { |
539 | 539 | GET16(wv, &buf[16]); |
540 | 540 | trace_ds(",wv=%d", wv); |
541 | 541 | } else |
542 | - wv = (w > maxCOLS)? maxCOLS: w; | |
542 | + wv = (w > h3270.maxCOLS)? h3270.maxCOLS: w; | |
543 | 543 | |
544 | 544 | if (buflen > 19) { |
545 | 545 | GET16(rw, &buf[18]); |
... | ... | @@ -605,7 +605,7 @@ sf_outbound_ds(unsigned char buf[], int buflen) |
605 | 605 | break; |
606 | 606 | case SNA_CMD_EW: |
607 | 607 | trace_ds(" EraseWrite"); |
608 | - ctlr_erase(screen_alt); | |
608 | + ctlr_erase(&h3270,h3270.screen_alt); | |
609 | 609 | if (buflen > 5) { |
610 | 610 | if ((rv = ctlr_write(&buf[4], buflen-4, True)) < 0) |
611 | 611 | return rv; |
... | ... | @@ -614,7 +614,7 @@ sf_outbound_ds(unsigned char buf[], int buflen) |
614 | 614 | break; |
615 | 615 | case SNA_CMD_EWA: |
616 | 616 | trace_ds(" EraseWriteAlternate"); |
617 | - ctlr_erase(screen_alt); | |
617 | + ctlr_erase(&h3270,h3270.screen_alt); | |
618 | 618 | if (buflen > 5) { |
619 | 619 | if ((rv = ctlr_write(&buf[4], buflen-4, True)) < 0) |
620 | 620 | return rv; | ... | ... |
latest/src/lib/trace_ds.c
... | ... | @@ -447,7 +447,7 @@ create_tracefile_header(const char *mode) |
447 | 447 | * write to ensure that the display is in the right |
448 | 448 | * mode. |
449 | 449 | */ |
450 | - if (formatted) { | |
450 | + if (h3270.formatted) { | |
451 | 451 | wtrace(" Screen contents:\n"); |
452 | 452 | obptr = obuf; |
453 | 453 | #if defined(X3270_TN3270E) /*[*/ | ... | ... |