Commit ee43ad7e863c030f096f0f4042db51341a4619c3

Authored by perry.werneck@gmail.com
1 parent 1ec15611
Exists in master

movendo flag da OIA para a estrutura de controle de sessao

latest/src/include/lib3270.h
... ... @@ -131,7 +131,6 @@
131 131 */
132 132 LIB3270_EXPORT int lib3270_set_cursor_address(H3270 *h, int baddr);
133 133  
134   -
135 134 /**
136 135 * get cursor address.
137 136 *
... ... @@ -143,4 +142,7 @@
143 142 LIB3270_EXPORT int lib3270_get_cursor_address(H3270 *h);
144 143  
145 144  
  145 + LIB3270_EXPORT STATUS_CODE lib3270_get_oia_status(H3270 *h);
  146 +
  147 +
146 148 #endif // LIB3270_H_INCLUDED
... ...
latest/src/include/lib3270/api.h
... ... @@ -160,6 +160,29 @@
160 160 CONNECTED_TN3270E /**< connected in TN3270E mode, 3270 mode */
161 161 };
162 162  
  163 + typedef enum _STATUS_CODE
  164 + {
  165 + STATUS_CODE_BLANK,
  166 + STATUS_CODE_SYSWAIT,
  167 + STATUS_CODE_TWAIT,
  168 + STATUS_CODE_CONNECTED,
  169 + STATUS_CODE_DISCONNECTED,
  170 + STATUS_CODE_AWAITING_FIRST,
  171 + STATUS_CODE_MINUS,
  172 + STATUS_CODE_PROTECTED,
  173 + STATUS_CODE_NUMERIC,
  174 + STATUS_CODE_OVERFLOW,
  175 + STATUS_CODE_INHIBIT,
  176 + STATUS_CODE_KYBDLOCK,
  177 +
  178 + STATUS_CODE_X,
  179 + STATUS_CODE_RESOLVING,
  180 + STATUS_CODE_CONNECTING,
  181 +
  182 + STATUS_CODE_USER
  183 +
  184 + } STATUS_CODE;
  185 +
163 186 struct lib3270_state_callback;
164 187  
165 188 typedef struct _h3270
... ... @@ -192,6 +215,8 @@
192 215 char * qualified_host;
193 216 char auto_reconnect_inprogress;
194 217  
  218 + STATUS_CODE oia_status;
  219 +
195 220 unsigned short current_port;
196 221  
197 222 // screen info
... ... @@ -379,29 +404,6 @@
379 404 CURSOR_MODE_USER
380 405 } CURSOR_MODE;
381 406  
382   - typedef enum _STATUS_CODE
383   - {
384   - STATUS_CODE_BLANK,
385   - STATUS_CODE_SYSWAIT,
386   - STATUS_CODE_TWAIT,
387   - STATUS_CODE_CONNECTED,
388   - STATUS_CODE_DISCONNECTED,
389   - STATUS_CODE_AWAITING_FIRST,
390   - STATUS_CODE_MINUS,
391   - STATUS_CODE_PROTECTED,
392   - STATUS_CODE_NUMERIC,
393   - STATUS_CODE_OVERFLOW,
394   - STATUS_CODE_INHIBIT,
395   - STATUS_CODE_KYBDLOCK,
396   -
397   - STATUS_CODE_X,
398   - STATUS_CODE_RESOLVING,
399   - STATUS_CODE_CONNECTING,
400   -
401   - STATUS_CODE_USER
402   -
403   - } STATUS_CODE;
404   -
405 407 typedef enum _SCRIPT_STATE
406 408 {
407 409 SCRIPT_STATE_NONE,
... ... @@ -539,7 +541,9 @@
539 541 LIB3270_EXPORT void popup_an_error(const char *fmt, ...);
540 542 LIB3270_EXPORT void popup_system_error(const char *title, const char *message, const char *system);
541 543 LIB3270_EXPORT void popup_a_sockerr(char *fmt, ...);
542   - LIB3270_EXPORT STATUS_CODE query_3270_terminal_status(void);
  544 +
  545 + #define query_3270_terminal_status(void) lib3270_get_oia_status(NULL)
  546 +
543 547 LIB3270_EXPORT int set_3270_model(H3270 *session, int model);
544 548 LIB3270_EXPORT int get_3270_model(H3270 *session);
545 549  
... ...
latest/src/lib/ctlr.c
... ... @@ -103,7 +103,7 @@ static unsigned char default_ic;
103 103 static void ctlr_half_connect(H3270 *session, int ignored, void *dunno);
104 104 static void ctlr_connect(H3270 *session, int ignored, void *dunno);
105 105 static int sscp_start;
106   -static void ticking_stop(void);
  106 +static void ticking_stop(H3270 *session);
107 107 static void ctlr_add_ic(int baddr, unsigned char ic);
108 108 static void changed(H3270 *session, int bstart, int bend);
109 109  
... ... @@ -279,10 +279,9 @@ set_formatted(void)
279 279 /*
280 280 * Called when a host is half connected.
281 281 */
282   -static void
283   -ctlr_half_connect(H3270 *session, int ignored unused, void *dunno)
  282 +static void ctlr_half_connect(H3270 *session, int ignored unused, void *dunno)
284 283 {
285   - ticking_start(True);
  284 + ticking_start(session,True);
286 285 }
287 286  
288 287  
... ... @@ -292,8 +291,8 @@ ctlr_half_connect(H3270 *session, int ignored unused, void *dunno)
292 291 static void
293 292 ctlr_connect(H3270 *session, int ignored unused, void *dunno)
294 293 {
295   - ticking_stop();
296   - status_untiming();
  294 + ticking_stop(session);
  295 + status_untiming(session);
297 296  
298 297 if (ever_3270)
299 298 ea_buf[-1].fa = FA_PRINTABLE | FA_MODIFY;
... ... @@ -301,7 +300,7 @@ ctlr_connect(H3270 *session, int ignored unused, void *dunno)
301 300 ea_buf[-1].fa = FA_PRINTABLE | FA_PROTECT;
302 301 if (!IN_3270 || (IN_SSCP && (kybdlock & KL_OIA_TWAIT))) {
303 302 kybdlock_clr(KL_OIA_TWAIT, "ctlr_connect");
304   - status_reset();
  303 + status_reset(session);
305 304 }
306 305  
307 306 default_fg = 0x00;
... ... @@ -1180,7 +1179,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1180 1179 }
1181 1180 wcc_keyboard_restore = WCC_KEYBOARD_RESTORE(buf[1]);
1182 1181 if (wcc_keyboard_restore)
1183   - ticking_stop();
  1182 + ticking_stop(NULL);
1184 1183 if (wcc_keyboard_restore) {
1185 1184 trace_ds("%srestore", paren);
1186 1185 paren = ",";
... ... @@ -2754,30 +2753,33 @@ static void keep_ticking(H3270 *session)
2754 2753 } while (msec <= 0);
2755 2754  
2756 2755 tick_id = AddTimeOut(msec, session, keep_ticking);
2757   - status_timing(&t_start, &t1);
  2756 + status_timing(session,&t_start, &t1);
2758 2757 }
2759 2758  
2760   -void
2761   -ticking_start(Boolean anyway)
  2759 +void ticking_start(H3270 *session, Boolean anyway)
2762 2760 {
  2761 + CHECK_SESSION_HANDLE(session);
  2762 +
2763 2763 (void) gettimeofday(&t_start, (struct timezone *) 0);
  2764 +
2764 2765 mticking = True;
2765 2766  
2766 2767 if (!toggled(SHOW_TIMING) && !anyway)
2767 2768 return;
2768   - status_untiming();
  2769 + status_untiming(session);
2769 2770 if (ticking)
2770 2771 RemoveTimeOut(tick_id);
2771 2772 ticking = True;
2772   - tick_id = AddTimeOut(1000, &h3270, keep_ticking);
  2773 + tick_id = AddTimeOut(1000, session, keep_ticking);
2773 2774 t_want = t_start;
2774 2775 }
2775 2776  
2776   -static void
2777   -ticking_stop(void)
  2777 +static void ticking_stop(H3270 *session)
2778 2778 {
2779 2779 struct timeval t1;
2780 2780  
  2781 + CHECK_SESSION_HANDLE(session);
  2782 +
2781 2783 (void) gettimeofday(&t1, (struct timezone *) 0);
2782 2784 if (mticking) {
2783 2785 // sms_accumulate_time(&t_start, &t1);
... ... @@ -2790,14 +2792,14 @@ ticking_stop(void)
2790 2792 return;
2791 2793 RemoveTimeOut(tick_id);
2792 2794 ticking = False;
2793   - status_timing(&t_start, &t1);
  2795 + status_timing(session,&t_start, &t1);
2794 2796 }
2795 2797  
2796 2798 void
2797 2799 toggle_showTiming(struct toggle *t unused, enum toggle_type tt unused)
2798 2800 {
2799 2801 if (!toggled(SHOW_TIMING))
2800   - status_untiming();
  2802 + status_untiming(NULL);
2801 2803 }
2802 2804  
2803 2805  
... ...
latest/src/lib/ctlrc.h
... ... @@ -60,7 +60,7 @@ LIB3270_INTERNAL void ps_process(void);
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 62  
63   -LIB3270_INTERNAL void ticking_start(Boolean anyway);
  63 +LIB3270_INTERNAL void ticking_start(H3270 *session, Boolean anyway);
64 64 LIB3270_INTERNAL void toggle_nop(struct toggle *t, enum toggle_type tt);
65 65 LIB3270_INTERNAL void toggle_showTiming(struct toggle *t, enum toggle_type tt);
66 66  
... ...
latest/src/lib/glue.c
... ... @@ -170,6 +170,7 @@ H3270 * lib3270_session_new(const char *model)
170 170 hSession->first_changed = -1;
171 171 hSession->last_changed = -1;
172 172 hSession->cstate = NOT_CONNECTED;
  173 + hSession->oia_status = -1;
173 174  
174 175 strncpy(hSession->full_model_name,"IBM-",FULL_MODEL_NAME_SIZE);
175 176 hSession->model_name = &hSession->full_model_name[4];
... ...
latest/src/lib/kybd.c
... ... @@ -393,11 +393,11 @@ kybd_inhibit(Boolean inhibit)
393 393 if (inhibit) {
394 394 kybdlock_set(KL_ENTER_INHIBIT, "kybd_inhibit");
395 395 if (kybdlock == KL_ENTER_INHIBIT)
396   - status_reset();
  396 + status_reset(NULL);
397 397 } else {
398 398 kybdlock_clr(KL_ENTER_INHIBIT, "kybd_inhibit");
399 399 if (!kybdlock)
400   - status_reset();
  400 + status_reset(NULL);
401 401 }
402 402 }
403 403  
... ... @@ -466,7 +466,7 @@ operator_error(int error_type)
466 466 // popup_an_error("Keyboard locked");
467 467  
468 468 if(appres.oerr_lock) { // || sms_redirect()) {
469   - status_oerr(error_type);
  469 + status_oerr(NULL,error_type);
470 470 mcursor_locked();
471 471 kybdlock_set((unsigned int)error_type, "operator_error");
472 472 (void) flush_ta();
... ... @@ -527,15 +527,15 @@ key_AID(unsigned char aid_code)
527 527 buffer_addr = h3270.cursor_addr;
528 528 }
529 529 if (!IN_SSCP || aid_code != AID_CLEAR) {
530   - status_twait();
  530 + status_twait(NULL);
531 531 mcursor_waiting();
532 532 set_toggle(INSERT,0);
533 533 kybdlock_set(KL_OIA_TWAIT | KL_OIA_LOCKED, "key_AID");
534 534 }
535 535 aid = aid_code;
536 536 ctlr_read_modified(aid, False);
537   - ticking_start(False);
538   - status_ctlr_done();
  537 + ticking_start(NULL,False);
  538 + status_ctlr_done(NULL);
539 539 }
540 540  
541 541 LIB3270_FKEY_ACTION( pfkey )
... ... @@ -1425,7 +1425,7 @@ LIB3270_KEY_ACTION( tab )
1425 1425 if (kybdlock) {
1426 1426 if (KYBDLOCK_IS_OERR) {
1427 1427 kybdlock_clr(KL_OERR_MASK, "Tab");
1428   - status_reset();
  1428 + status_reset(&h3270);
1429 1429 } else {
1430 1430 ENQUEUE_ACTION(lib3270_tab);
1431 1431 return 0;
... ... @@ -1455,7 +1455,7 @@ LIB3270_KEY_ACTION( backtab )
1455 1455 if (kybdlock) {
1456 1456 if (KYBDLOCK_IS_OERR) {
1457 1457 kybdlock_clr(KL_OERR_MASK, "BackTab");
1458   - status_reset();
  1458 + status_reset(NULL);
1459 1459 } else {
1460 1460 ENQUEUE_ACTION(lib3270_backtab);
1461 1461 return 0;
... ... @@ -1494,7 +1494,7 @@ LIB3270_KEY_ACTION( backtab )
1494 1494 static void defer_unlock(H3270 *session)
1495 1495 {
1496 1496 kybdlock_clr(KL_DEFERRED_UNLOCK, "defer_unlock");
1497   - status_reset();
  1497 + status_reset(session);
1498 1498 if (CONNECTED)
1499 1499 ps_process();
1500 1500 }
... ... @@ -1566,7 +1566,7 @@ do_reset(Boolean explicit)
1566 1566 }
1567 1567  
1568 1568 /* Clean up other modes. */
1569   - status_reset();
  1569 + status_reset(NULL);
1570 1570 mcursor_normal();
1571 1571  
1572 1572 // composing = NONE;
... ... @@ -1643,7 +1643,7 @@ LIB3270_CURSOR_ACTION( left )
1643 1643 if (KYBDLOCK_IS_OERR)
1644 1644 {
1645 1645 kybdlock_clr(KL_OERR_MASK, "Left");
1646   - status_reset();
  1646 + status_reset(NULL);
1647 1647 }
1648 1648 else
1649 1649 {
... ... @@ -1905,7 +1905,7 @@ LIB3270_CURSOR_ACTION( right )
1905 1905 if (KYBDLOCK_IS_OERR)
1906 1906 {
1907 1907 kybdlock_clr(KL_OERR_MASK, "Right");
1908   - status_reset();
  1908 + status_reset(NULL);
1909 1909 }
1910 1910 else
1911 1911 {
... ... @@ -2216,7 +2216,7 @@ LIB3270_CURSOR_ACTION( up )
2216 2216 if (KYBDLOCK_IS_OERR)
2217 2217 {
2218 2218 kybdlock_clr(KL_OERR_MASK, "Up");
2219   - status_reset();
  2219 + status_reset(NULL);
2220 2220 }
2221 2221 else
2222 2222 {
... ... @@ -2265,7 +2265,7 @@ LIB3270_CURSOR_ACTION( down )
2265 2265 if (KYBDLOCK_IS_OERR)
2266 2266 {
2267 2267 kybdlock_clr(KL_OERR_MASK, "Down");
2268   - status_reset();
  2268 + status_reset(NULL);
2269 2269 } else
2270 2270 {
2271 2271 ENQUEUE_ACTION(lib3270_cursor_down);
... ...
latest/src/lib/screen.c
... ... @@ -79,22 +79,18 @@ extern char *profile_name;
79 79 #endif
80 80  
81 81 static const struct lib3270_screen_callbacks *callbacks = NULL;
  82 +static SCRIPT_STATE script_state = SCRIPT_STATE_NONE;
82 83  
83   -int lib3270_event_counter[COUNTER_ID_USER] = { 0, 0 };
84 84  
85   -// Boolean screen_has_changes = 0;
  85 +int lib3270_event_counter[COUNTER_ID_USER] = { 0, 0 };
86 86  
87 87 enum ts { TS_AUTO, TS_ON, TS_OFF };
88   -// enum ts ab_mode = TS_AUTO;
89   -
90   -// int windows_cp = 0;
91 88  
92 89 static void screen_update(H3270 *session, int bstart, int bend);
93 90 static void status_connect(H3270 *session, int ignored, void *dunno);
94 91 static void status_3270_mode(H3270 *session, int ignored, void *dunno);
95 92 static void status_printer(H3270 *session, int on, void *dunno);
96 93 static int color_from_fa(unsigned char fa);
97   -// static Boolean ts_value(const char *s, enum ts *tsp);
98 94 static void relabel(H3270 *session, int ignored, void *dunno);
99 95  
100 96 void set_display_charset(char *dcs)
... ... @@ -470,31 +466,27 @@ LIB3270_EXPORT int lib3270_set_cursor_address(H3270 *h, int baddr)
470 466  
471 467 /* Status line stuff. */
472 468  
473   -static void set(OIA_FLAG id, Boolean on)
  469 +void set_status(H3270 *session, OIA_FLAG id, Boolean on)
474 470 {
  471 + CHECK_SESSION_HANDLE(session);
  472 +
475 473 if(callbacks && callbacks->set)
476 474 callbacks->set(id,on);
477 475 }
478 476  
479   -void status_ctlr_done(void)
  477 +void status_ctlr_done(H3270 *session)
480 478 {
  479 + CHECK_SESSION_HANDLE(session);
481 480 lib3270_event_counter[COUNTER_ID_CTLR_DONE]++;
482   - set(OIA_FLAG_UNDERA,True);
483   -}
484   -
485   -/*
486   -void
487   -status_minus(void)
488   -{
489   - status_changed(STATUS_CODE_MINUS);
  481 + set_status(session,OIA_FLAG_UNDERA,True);
490 482 }
491   -*/
492 483  
493   -void
494   -status_oerr(int error_type)
  484 +void status_oerr(H3270 *session, int error_type)
495 485 {
496 486 STATUS_CODE sts = STATUS_CODE_USER;
497 487  
  488 + CHECK_SESSION_HANDLE(session);
  489 +
498 490 switch (error_type)
499 491 {
500 492 case KL_OERR_PROTECTED:
... ... @@ -511,7 +503,7 @@ status_oerr(int error_type)
511 503 return;
512 504 }
513 505  
514   - status_changed(sts);
  506 + status_changed(session,sts);
515 507  
516 508 }
517 509  
... ... @@ -520,7 +512,7 @@ void status_resolving(H3270 *session, Boolean on)
520 512 if(callbacks && callbacks->cursor)
521 513 callbacks->cursor(on ? CURSOR_MODE_LOCKED : CURSOR_MODE_NORMAL);
522 514  
523   - status_changed(on ? STATUS_CODE_RESOLVING : STATUS_CODE_BLANK);
  515 + status_changed(session, on ? STATUS_CODE_RESOLVING : STATUS_CODE_BLANK);
524 516 }
525 517  
526 518 void status_connecting(H3270 *session, Boolean on)
... ... @@ -528,20 +520,21 @@ void status_connecting(H3270 *session, Boolean on)
528 520 if(callbacks && callbacks->cursor)
529 521 callbacks->cursor(on ? CURSOR_MODE_LOCKED : CURSOR_MODE_NORMAL);
530 522  
531   - status_changed(on ? STATUS_CODE_CONNECTING : STATUS_CODE_BLANK);
  523 + status_changed(session, on ? STATUS_CODE_CONNECTING : STATUS_CODE_BLANK);
532 524 }
533 525  
534   -void
535   -status_reset(void)
  526 +void status_reset(H3270 *session)
536 527 {
  528 + CHECK_SESSION_HANDLE(session);
  529 +
537 530 if (kybdlock & KL_ENTER_INHIBIT)
538   - status_changed(STATUS_CODE_INHIBIT);
  531 + status_changed(session,STATUS_CODE_INHIBIT);
539 532 else if (kybdlock & KL_DEFERRED_UNLOCK)
540   - status_changed(STATUS_CODE_X);
  533 + status_changed(session,STATUS_CODE_X);
541 534 else
542   - status_changed(STATUS_CODE_BLANK);
  535 + status_changed(session,STATUS_CODE_BLANK);
543 536  
544   - screen_disp(&h3270);
  537 + screen_disp(session);
545 538  
546 539 if(callbacks && callbacks->reset)
547 540 {
... ... @@ -551,12 +544,7 @@ status_reset(void)
551 544  
552 545 }
553 546  
554   -void status_reverse_mode(int on)
555   -{
556   - set(OIA_FLAG_REVERSE,on);
557   -}
558   -
559   -static STATUS_CODE current_status_code = -1;
  547 +// static STATUS_CODE current_status_code = -1;
560 548  
561 549 /**
562 550 * Query the updated terminal status.
... ... @@ -565,35 +553,36 @@ static STATUS_CODE current_status_code = -1;
565 553 *
566 554 * @see STATUS_CODE
567 555 */
568   -LIB3270_EXPORT STATUS_CODE query_3270_terminal_status(void)
  556 +LIB3270_EXPORT STATUS_CODE lib3270_get_oia_status(H3270 *session)
569 557 {
570   - return current_status_code;
  558 + CHECK_SESSION_HANDLE(session);
  559 + return session->oia_status;
571 560 }
572 561  
573   -void status_changed(STATUS_CODE id)
  562 +void status_changed(H3270 *session, STATUS_CODE id)
574 563 {
575   - if(id == current_status_code)
  564 + CHECK_SESSION_HANDLE(session);
  565 +
  566 + if(id == session->oia_status)
576 567 return;
577 568  
578   - current_status_code = id;
  569 + session->oia_status = id;
579 570  
580 571 if(callbacks && callbacks->status)
581 572 callbacks->status(id);
582 573 }
583 574  
584   -void status_twait(void)
585   -{
586   - set(OIA_FLAG_UNDERA,False);
587   - status_changed(STATUS_CODE_TWAIT);
588   -}
589   -
590   -void status_typeahead(int on)
  575 +void status_twait(H3270 *session)
591 576 {
592   - set(OIA_FLAG_TYPEAHEAD,on);
  577 + CHECK_SESSION_HANDLE(session);
  578 + set_status(session,OIA_FLAG_UNDERA,False);
  579 + status_changed(session,STATUS_CODE_TWAIT);
593 580 }
594 581  
595 582 void set_viewsize(H3270 *session, int rows, int cols)
596 583 {
  584 + CHECK_SESSION_HANDLE(session);
  585 +
597 586 if(rows == session->rows && session->cols == cols)
598 587 return;
599 588  
... ... @@ -605,7 +594,7 @@ void set_viewsize(H3270 *session, int rows, int cols)
605 594  
606 595 }
607 596  
608   -void status_lu(const char *lu)
  597 +void status_lu(H3270 *session, const char *lu)
609 598 {
610 599 if(callbacks && callbacks->lu)
611 600 callbacks->lu(lu);
... ... @@ -617,7 +606,7 @@ static void status_connect(H3270 *session, int connected, void *dunno)
617 606  
618 607 if (connected) {
619 608  
620   - set(OIA_FLAG_BOXSOLID,IN_3270 && !IN_SSCP);
  609 + set_status(session,OIA_FLAG_BOXSOLID,IN_3270 && !IN_SSCP);
621 610  
622 611 if (kybdlock & KL_AWAITING_FIRST)
623 612 id = STATUS_CODE_AWAITING_FIRST;
... ... @@ -625,17 +614,17 @@ static void status_connect(H3270 *session, int connected, void *dunno)
625 614 id = STATUS_CODE_CONNECTED;
626 615  
627 616 #if defined(HAVE_LIBSSL) /*[*/
628   - set(OIA_FLAG_SECURE,session->secure_connection);
  617 + set_status(session,OIA_FLAG_SECURE,session->secure_connection);
629 618 #endif /*]*/
630 619  
631 620 } else {
632   - set(OIA_FLAG_BOXSOLID,False);
633   - set(OIA_FLAG_SECURE,False);
  621 + set_status(session,OIA_FLAG_BOXSOLID,False);
  622 + set_status(session,OIA_FLAG_SECURE,False);
634 623  
635 624 id = STATUS_CODE_DISCONNECTED;
636 625 }
637 626  
638   - status_changed(id);
  627 + status_changed(session,id);
639 628  
640 629 }
641 630  
... ... @@ -643,18 +632,16 @@ static void status_3270_mode(H3270 *session, int ignored unused, void *dunno)
643 632 {
644 633 Boolean oia_boxsolid = (IN_3270 && !IN_SSCP);
645 634 if(oia_boxsolid)
646   - set(OIA_FLAG_UNDERA,True);
647   - set(OIA_FLAG_BOXSOLID,oia_boxsolid);
  635 + set_status(session,OIA_FLAG_UNDERA,True);
  636 + set_status(session,OIA_FLAG_BOXSOLID,oia_boxsolid);
648 637  
649 638 }
650 639  
651 640 static void status_printer(H3270 *session, int on, void *dunno)
652 641 {
653   - set(OIA_FLAG_PRINTER,on);
  642 + set_status(session,OIA_FLAG_PRINTER,on);
654 643 }
655 644  
656   -static SCRIPT_STATE script_state = SCRIPT_STATE_NONE;
657   -
658 645 LIB3270_EXPORT SCRIPT_STATE status_script(SCRIPT_STATE state)
659 646 {
660 647 if(state != script_state && callbacks && callbacks->set_script)
... ... @@ -662,14 +649,18 @@ LIB3270_EXPORT SCRIPT_STATE status_script(SCRIPT_STATE state)
662 649 return script_state = state;
663 650 }
664 651  
665   -void status_timing(struct timeval *t0, struct timeval *t1)
  652 +void status_timing(H3270 *session, struct timeval *t0, struct timeval *t1)
666 653 {
  654 + CHECK_SESSION_HANDLE(session);
  655 +
667 656 if(callbacks && callbacks->show_timer)
668 657 callbacks->show_timer(t1->tv_sec - t0->tv_sec);
669 658 }
670 659  
671   -void status_untiming(void)
  660 +void status_untiming(H3270 *session)
672 661 {
  662 + CHECK_SESSION_HANDLE(session);
  663 +
673 664 if(callbacks && callbacks->show_timer)
674 665 callbacks->show_timer(-1);
675 666 }
... ...
latest/src/lib/statusc.h
... ... @@ -16,23 +16,28 @@
16 16 #include <lib3270/api.h>
17 17  
18 18 LIB3270_INTERNAL void status_compose(int on, unsigned char c, enum keytype keytype);
19   -LIB3270_INTERNAL void status_ctlr_done(void);
  19 +LIB3270_INTERNAL void status_ctlr_done(H3270 *session);
20 20  
21   -LIB3270_INTERNAL void status_timing(struct timeval *t0, struct timeval *t1);
22   -LIB3270_INTERNAL void status_untiming(void);
  21 +LIB3270_INTERNAL void status_timing(H3270 *session, struct timeval *t0, struct timeval *t1);
  22 +LIB3270_INTERNAL void status_untiming(H3270 *session);
23 23  
24   -LIB3270_INTERNAL void status_lu(const char *);
25   -LIB3270_INTERNAL void status_oerr(int error_type);
26   -LIB3270_INTERNAL void status_reset(void);
27   -LIB3270_INTERNAL void status_reverse_mode(int on);
28   -LIB3270_INTERNAL void status_twait(void);
29   -LIB3270_INTERNAL void status_typeahead(int on);
  24 +LIB3270_INTERNAL void status_lu(H3270 *session, const char *);
  25 +LIB3270_INTERNAL void status_oerr(H3270 *session, int error_type);
  26 +LIB3270_INTERNAL void status_reset(H3270 *session);
  27 +LIB3270_INTERNAL void status_twait(H3270 *session);
30 28  
31   -LIB3270_INTERNAL void status_changed(STATUS_CODE id);
32 29  
33   -#define status_kybdlock() status_changed(STATUS_CODE_KYBDLOCK)
34   -#define status_syswait() status_changed(STATUS_CODE_SYSWAIT)
35   -#define status_minus() status_changed(STATUS_CODE_MINUS)
  30 +
  31 +
  32 +LIB3270_INTERNAL void status_changed(H3270 *session, STATUS_CODE id);
  33 +
  34 +LIB3270_INTERNAL void set_status(H3270 *session, OIA_FLAG id, Boolean on);
  35 +
  36 +
  37 +#define status_typeahead(on) set_status(NULL,OIA_FLAG_TYPEAHEAD,on)
  38 +#define status_kybdlock() status_changed(NULL,STATUS_CODE_KYBDLOCK)
  39 +#define status_syswait() status_changed(NULL,STATUS_CODE_SYSWAIT)
  40 +#define status_minus() status_changed(NULL,STATUS_CODE_MINUS)
36 41  
37 42  
38 43 extern int lib3270_event_counter[COUNTER_ID_USER];
... ...
latest/src/lib/telnet.c
... ... @@ -903,7 +903,7 @@ net_disconnect(void)
903 903  
904 904 /* We're not connected to an LU any more. */
905 905 h3270.connected_lu = CN;
906   - status_lu(CN);
  906 + status_lu(&h3270,CN);
907 907  
908 908 #if !defined(_WIN32) /*[*/
909 909 /* We have no more interest in output buffer space. */
... ... @@ -1175,7 +1175,7 @@ telnet_fsm(unsigned char c)
1175 1175 #endif /*]*/
1176 1176 host_in3270(CONNECTED_ANSI);
1177 1177 kybdlock_clr(KL_AWAITING_FIRST, "telnet_fsm");
1178   - status_reset();
  1178 + status_reset(NULL);
1179 1179 ps_process();
1180 1180 }
1181 1181 if (IN_ANSI && !IN_E) {
... ... @@ -1437,7 +1437,7 @@ telnet_fsm(unsigned char c)
1437 1437 h3270.connected_lu = try_lu;
1438 1438 } else
1439 1439 h3270.connected_lu = CN;
1440   - status_lu(h3270.connected_lu);
  1440 + status_lu(&h3270,h3270.connected_lu);
1441 1441  
1442 1442 tb_len = 4 + tt_len + 2;
1443 1443 tt_out = Malloc(tb_len + 1);
... ... @@ -1620,7 +1620,7 @@ tn3270e_negotiate(void)
1620 1620 (char *)&sbbuf[3+tnlen+1], snlen);
1621 1621 reported_lu[snlen] = '\0';
1622 1622 h3270.connected_lu = reported_lu;
1623   - status_lu(h3270.connected_lu);
  1623 + status_lu(&h3270,h3270.connected_lu);
1624 1624 }
1625 1625  
1626 1626 /* Tell them what we can do. */
... ...