Commit ee43ad7e863c030f096f0f4042db51341a4619c3
1 parent
1ec15611
Exists in
master
movendo flag da OIA para a estrutura de controle de sessao
Showing
9 changed files
with
139 additions
and
134 deletions
Show diff stats
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. */ | ... | ... |