Commit 73b2d115ed2803cceaf129667438c632da4cee26

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

Ajustes para multi-sessao

Showing 5 changed files with 50 additions and 115 deletions   Show diff stats
@@ -309,7 +309,7 @@ static void ctlr_connect(H3270 *session, int ignored unused, void *dunno) @@ -309,7 +309,7 @@ static void ctlr_connect(H3270 *session, int ignored unused, void *dunno)
309 session->ea_buf[-1].fa = FA_PRINTABLE | FA_PROTECT; 309 session->ea_buf[-1].fa = FA_PRINTABLE | FA_PROTECT;
310 if (!IN_3270 || (IN_SSCP && (session->kybdlock & KL_OIA_TWAIT))) 310 if (!IN_3270 || (IN_SSCP && (session->kybdlock & KL_OIA_TWAIT)))
311 { 311 {
312 - kybdlock_clr(KL_OIA_TWAIT, "ctlr_connect"); 312 + kybdlock_clr(session,KL_OIA_TWAIT, "ctlr_connect");
313 status_reset(session); 313 status_reset(session);
314 } 314 }
315 315
@@ -457,7 +457,7 @@ void ctlr_erase(H3270 *session, int alt) @@ -457,7 +457,7 @@ void ctlr_erase(H3270 *session, int alt)
457 { 457 {
458 CHECK_SESSION_HANDLE(session); 458 CHECK_SESSION_HANDLE(session);
459 459
460 - kybd_inhibit(False); 460 + kybd_inhibit(session,False);
461 ctlr_clear(session,True); 461 ctlr_clear(session,True);
462 session->erase(session); 462 session->erase(session);
463 463
@@ -1067,7 +1067,7 @@ ctlr_erase_all_unprotected(void) @@ -1067,7 +1067,7 @@ ctlr_erase_all_unprotected(void)
1067 unsigned char fa; 1067 unsigned char fa;
1068 Boolean f; 1068 Boolean f;
1069 1069
1070 - kybd_inhibit(False); 1070 + kybd_inhibit(&h3270,False);
1071 1071
1072 if (h3270.formatted) { 1072 if (h3270.formatted) {
1073 /* find first field attribute */ 1073 /* find first field attribute */
@@ -1162,7 +1162,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) @@ -1162,7 +1162,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1162 h3270.formatted = True; \ 1162 h3270.formatted = True; \
1163 } 1163 }
1164 1164
1165 - kybd_inhibit(False); 1165 + kybd_inhibit(&h3270,False);
1166 1166
1167 if (buflen < 2) 1167 if (buflen < 2)
1168 return PDS_BAD_CMD; 1168 return PDS_BAD_CMD;
@@ -1865,7 +1865,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase) @@ -1865,7 +1865,7 @@ ctlr_write(unsigned char buf[], int buflen, Boolean erase)
1865 h3270.aid = AID_NO; 1865 h3270.aid = AID_NO;
1866 do_reset(&h3270,False); 1866 do_reset(&h3270,False);
1867 } else if (h3270.kybdlock & KL_OIA_TWAIT) { 1867 } else if (h3270.kybdlock & KL_OIA_TWAIT) {
1868 - kybdlock_clr(KL_OIA_TWAIT, "ctlr_write"); 1868 + kybdlock_clr(&h3270,KL_OIA_TWAIT, "ctlr_write");
1869 status_changed(&h3270,LIB3270_STATUS_SYSWAIT); 1869 status_changed(&h3270,LIB3270_STATUS_SYSWAIT);
1870 } 1870 }
1871 if (wcc_sound_alarm) 1871 if (wcc_sound_alarm)
@@ -370,38 +370,47 @@ kybdlock_set(unsigned int bits, const char *cause unused) @@ -370,38 +370,47 @@ kybdlock_set(unsigned int bits, const char *cause unused)
370 370
371 /* Clear bits in the keyboard lock. */ 371 /* Clear bits in the keyboard lock. */
372 void 372 void
373 -kybdlock_clr(unsigned int bits, const char *cause unused) 373 +kybdlock_clr(H3270 *session, unsigned int bits, const char *cause unused)
374 { 374 {
375 unsigned int n; 375 unsigned int n;
376 376
377 - n = h3270.kybdlock & ~bits;  
378 - if (n != h3270.kybdlock) { 377 + n = session->kybdlock & ~bits;
  378 +
  379 + if (n != session->kybdlock)
  380 + {
379 #if defined(KYBDLOCK_TRACE) 381 #if defined(KYBDLOCK_TRACE)
380 trace_event(" %s: kybdlock &= ~0x%04x, 0x%04x -> 0x%04x\n",cause, bits, kybdlock, n); 382 trace_event(" %s: kybdlock &= ~0x%04x, 0x%04x -> 0x%04x\n",cause, bits, kybdlock, n);
381 #endif 383 #endif
382 - if ((h3270.kybdlock ^ n) & KL_DEFERRED_UNLOCK) { 384 + if ((session->kybdlock ^ n) & KL_DEFERRED_UNLOCK)
  385 + {
383 /* Turned off deferred unlock. */ 386 /* Turned off deferred unlock. */
384 - h3270.unlock_delay_time = 0; 387 + session->unlock_delay_time = 0;
385 } 388 }
386 - h3270.kybdlock = n;  
387 - status_changed(&h3270,LIB3270_STATUS_KYBDLOCK); 389 + session->kybdlock = n;
  390 + status_changed(session,LIB3270_STATUS_KYBDLOCK);
388 } 391 }
389 } 392 }
390 393
391 -/* 394 +/**
392 * Set or clear enter-inhibit mode. 395 * Set or clear enter-inhibit mode.
  396 + *
  397 + * @param session Session handle
  398 + * @param inhibit New state
  399 + *
393 */ 400 */
394 -void  
395 -kybd_inhibit(Boolean inhibit) 401 +void kybd_inhibit(H3270 *session, Boolean inhibit)
396 { 402 {
397 - if (inhibit) { 403 + if (inhibit)
  404 + {
398 kybdlock_set(KL_ENTER_INHIBIT, "kybd_inhibit"); 405 kybdlock_set(KL_ENTER_INHIBIT, "kybd_inhibit");
399 - if (h3270.kybdlock == KL_ENTER_INHIBIT)  
400 - status_reset(&h3270);  
401 - } else {  
402 - kybdlock_clr(KL_ENTER_INHIBIT, "kybd_inhibit");  
403 - if (!h3270.kybdlock)  
404 - status_reset(&h3270); 406 + if (session->kybdlock == KL_ENTER_INHIBIT)
  407 + status_reset(session);
  408 + }
  409 + else
  410 + {
  411 + kybdlock_clr(session,KL_ENTER_INHIBIT, "kybd_inhibit");
  412 + if (!session->kybdlock)
  413 + status_reset(session);
405 } 414 }
406 } 415 }
407 416
@@ -413,7 +422,7 @@ void kybd_connect(H3270 *session, int connected, void *dunno) @@ -413,7 +422,7 @@ void kybd_connect(H3270 *session, int connected, void *dunno)
413 if (session->kybdlock & KL_DEFERRED_UNLOCK) 422 if (session->kybdlock & KL_DEFERRED_UNLOCK)
414 RemoveTimeOut(session->unlock_id); 423 RemoveTimeOut(session->unlock_id);
415 424
416 - kybdlock_clr(-1, "kybd_connect"); 425 + kybdlock_clr(session, -1, "kybd_connect");
417 426
418 if (connected) { 427 if (connected) {
419 /* Wait for any output or a WCC(restore) from the host */ 428 /* Wait for any output or a WCC(restore) from the host */
@@ -431,7 +440,7 @@ void kybd_in3270(H3270 *session, int in3270 unused, void *dunno) @@ -431,7 +440,7 @@ void kybd_in3270(H3270 *session, int in3270 unused, void *dunno)
431 { 440 {
432 if (session->kybdlock & KL_DEFERRED_UNLOCK) 441 if (session->kybdlock & KL_DEFERRED_UNLOCK)
433 RemoveTimeOut(session->unlock_id); 442 RemoveTimeOut(session->unlock_id);
434 - kybdlock_clr(~KL_AWAITING_FIRST, "kybd_in3270"); 443 + kybdlock_clr(session,~KL_AWAITING_FIRST, "kybd_in3270");
435 444
436 /* There might be a macro pending. */ 445 /* There might be a macro pending. */
437 if (CONNECTED) 446 if (CONNECTED)
@@ -1378,7 +1387,7 @@ LIB3270_KEY_ACTION( tab ) @@ -1378,7 +1387,7 @@ LIB3270_KEY_ACTION( tab )
1378 1387
1379 if (hSession->kybdlock) { 1388 if (hSession->kybdlock) {
1380 if (KYBDLOCK_IS_OERR) { 1389 if (KYBDLOCK_IS_OERR) {
1381 - kybdlock_clr(KL_OERR_MASK, "Tab"); 1390 + kybdlock_clr(hSession,KL_OERR_MASK, "Tab");
1382 status_reset(hSession); 1391 status_reset(hSession);
1383 } else { 1392 } else {
1384 ENQUEUE_ACTION(lib3270_tab); 1393 ENQUEUE_ACTION(lib3270_tab);
@@ -1408,7 +1417,7 @@ LIB3270_KEY_ACTION( backtab ) @@ -1408,7 +1417,7 @@ LIB3270_KEY_ACTION( backtab )
1408 1417
1409 if (hSession->kybdlock) { 1418 if (hSession->kybdlock) {
1410 if (KYBDLOCK_IS_OERR) { 1419 if (KYBDLOCK_IS_OERR) {
1411 - kybdlock_clr(KL_OERR_MASK, "BackTab"); 1420 + kybdlock_clr(hSession,KL_OERR_MASK, "BackTab");
1412 status_reset(hSession); 1421 status_reset(hSession);
1413 } else { 1422 } else {
1414 ENQUEUE_ACTION(lib3270_backtab); 1423 ENQUEUE_ACTION(lib3270_backtab);
@@ -1447,7 +1456,7 @@ LIB3270_KEY_ACTION( backtab ) @@ -1447,7 +1456,7 @@ LIB3270_KEY_ACTION( backtab )
1447 1456
1448 static void defer_unlock(H3270 *session) 1457 static void defer_unlock(H3270 *session)
1449 { 1458 {
1450 - kybdlock_clr(KL_DEFERRED_UNLOCK, "defer_unlock"); 1459 + kybdlock_clr(session,KL_DEFERRED_UNLOCK, "defer_unlock");
1451 status_reset(session); 1460 status_reset(session);
1452 if (CONNECTED) 1461 if (CONNECTED)
1453 ps_process(); 1462 ps_process();
@@ -1501,10 +1510,10 @@ void do_reset(H3270 *session, Boolean explicit) @@ -1501,10 +1510,10 @@ void do_reset(H3270 *session, Boolean explicit)
1501 #endif /*]*/ 1510 #endif /*]*/
1502 || (!session->unlock_delay) // && !sms_in_macro()) 1511 || (!session->unlock_delay) // && !sms_in_macro())
1503 || (session->unlock_delay_time != 0 && (time(NULL) - session->unlock_delay_time) > 1)) { 1512 || (session->unlock_delay_time != 0 && (time(NULL) - session->unlock_delay_time) > 1)) {
1504 - kybdlock_clr(-1, "do_reset"); 1513 + kybdlock_clr(session,-1, "do_reset");
1505 } else if (session->kybdlock & 1514 } else if (session->kybdlock &
1506 (KL_DEFERRED_UNLOCK | KL_OIA_TWAIT | KL_OIA_LOCKED | KL_AWAITING_FIRST)) { 1515 (KL_DEFERRED_UNLOCK | KL_OIA_TWAIT | KL_OIA_LOCKED | KL_AWAITING_FIRST)) {
1507 - kybdlock_clr(~KL_DEFERRED_UNLOCK, "do_reset"); 1516 + kybdlock_clr(session,~KL_DEFERRED_UNLOCK, "do_reset");
1508 kybdlock_set(KL_DEFERRED_UNLOCK, "do_reset"); 1517 kybdlock_set(KL_DEFERRED_UNLOCK, "do_reset");
1509 session->unlock_id = AddTimeOut(UNLOCK_MS, session, defer_unlock); 1518 session->unlock_id = AddTimeOut(UNLOCK_MS, session, defer_unlock);
1510 } 1519 }
@@ -1580,7 +1589,7 @@ LIB3270_CURSOR_ACTION( left ) @@ -1580,7 +1589,7 @@ LIB3270_CURSOR_ACTION( left )
1580 { 1589 {
1581 if (KYBDLOCK_IS_OERR) 1590 if (KYBDLOCK_IS_OERR)
1582 { 1591 {
1583 - kybdlock_clr(KL_OERR_MASK, "Left"); 1592 + kybdlock_clr(hSession,KL_OERR_MASK, "Left");
1584 status_reset(&h3270); 1593 status_reset(&h3270);
1585 } 1594 }
1586 else 1595 else
@@ -1843,8 +1852,8 @@ LIB3270_CURSOR_ACTION( right ) @@ -1843,8 +1852,8 @@ LIB3270_CURSOR_ACTION( right )
1843 { 1852 {
1844 if (KYBDLOCK_IS_OERR) 1853 if (KYBDLOCK_IS_OERR)
1845 { 1854 {
1846 - kybdlock_clr(KL_OERR_MASK, "Right");  
1847 - status_reset(&h3270); 1855 + kybdlock_clr(hSession,KL_OERR_MASK, "Right");
  1856 + status_reset(hSession);
1848 } 1857 }
1849 else 1858 else
1850 { 1859 {
@@ -1876,43 +1885,6 @@ LIB3270_CURSOR_ACTION( right ) @@ -1876,43 +1885,6 @@ LIB3270_CURSOR_ACTION( right )
1876 1885
1877 1886
1878 /* 1887 /*
1879 - * Cursor left 2 positions.  
1880 - */ /*  
1881 -void  
1882 -Left2_action(Widget w unused, XEvent *event, String *params,  
1883 - Cardinal *num_params)  
1884 -{  
1885 - register int baddr;  
1886 - enum dbcs_state d;  
1887 -  
1888 -// reset_idle_timer();  
1889 - if (kybdlock) {  
1890 - if (KYBDLOCK_IS_OERR) {  
1891 - kybdlock_clr(KL_OERR_MASK, "Left2");  
1892 - status_reset(&h3270);  
1893 - } else {  
1894 - enq_ta(Left2_action, CN, CN);  
1895 - return;  
1896 - }  
1897 - }  
1898 -#if defined(X3270_ANSI)  
1899 - if (IN_ANSI)  
1900 - return;  
1901 -#endif  
1902 - baddr = cursor_addr;  
1903 - DEC_BA(baddr);  
1904 - d = ctlr_dbcs_state(baddr);  
1905 - if (IS_LEFT(d))  
1906 - DEC_BA(baddr);  
1907 - DEC_BA(baddr);  
1908 - d = ctlr_dbcs_state(baddr);  
1909 - if (IS_LEFT(d))  
1910 - DEC_BA(baddr);  
1911 - cursor_move(baddr);  
1912 -} */  
1913 -  
1914 -  
1915 -/*  
1916 * Cursor to previous word. 1888 * Cursor to previous word.
1917 */ 1889 */
1918 LIB3270_ACTION( previousword ) 1890 LIB3270_ACTION( previousword )
@@ -1979,44 +1951,7 @@ LIB3270_ACTION( previousword ) @@ -1979,44 +1951,7 @@ LIB3270_ACTION( previousword )
1979 return 0; 1951 return 0;
1980 } 1952 }
1981 1953
1982 -  
1983 -/*  
1984 - * Cursor right 2 positions.  
1985 - */ /*  
1986 -void  
1987 -Right2_action(Widget w unused, XEvent *event, String *params,  
1988 - Cardinal *num_params)  
1989 -{  
1990 - register int baddr;  
1991 - enum dbcs_state d;  
1992 1954
1993 -// reset_idle_timer();  
1994 - if (kybdlock) {  
1995 - if (KYBDLOCK_IS_OERR) {  
1996 - kybdlock_clr(KL_OERR_MASK, "Right2");  
1997 - status_reset(&h3270);  
1998 - } else {  
1999 - enq_ta(Right2_action, CN, CN);  
2000 - return;  
2001 - }  
2002 - }  
2003 -#if defined(X3270_ANSI)  
2004 - if (IN_ANSI)  
2005 - return;  
2006 -#endif  
2007 - baddr = cursor_addr;  
2008 - INC_BA(baddr);  
2009 - d = ctlr_dbcs_state(baddr);  
2010 - if (IS_RIGHT(d))  
2011 - INC_BA(baddr);  
2012 - INC_BA(baddr);  
2013 - d = ctlr_dbcs_state(baddr);  
2014 - if (IS_RIGHT(d))  
2015 - INC_BA(baddr);  
2016 - cursor_move(baddr);  
2017 -}  
2018 -*/  
2019 -  
2020 /* Find the next unprotected word, or -1 */ 1955 /* Find the next unprotected word, or -1 */
2021 static int 1956 static int
2022 nu_word(int baddr) 1957 nu_word(int baddr)
@@ -2146,8 +2081,8 @@ LIB3270_CURSOR_ACTION( up ) @@ -2146,8 +2081,8 @@ LIB3270_CURSOR_ACTION( up )
2146 if (hSession->kybdlock) { 2081 if (hSession->kybdlock) {
2147 if (KYBDLOCK_IS_OERR) 2082 if (KYBDLOCK_IS_OERR)
2148 { 2083 {
2149 - kybdlock_clr(KL_OERR_MASK, "Up");  
2150 - status_reset(&h3270); 2084 + kybdlock_clr(hSession,KL_OERR_MASK, "Up");
  2085 + status_reset(hSession);
2151 } 2086 }
2152 else 2087 else
2153 { 2088 {
@@ -2184,8 +2119,8 @@ LIB3270_CURSOR_ACTION( down ) @@ -2184,8 +2119,8 @@ LIB3270_CURSOR_ACTION( down )
2184 { 2119 {
2185 if (KYBDLOCK_IS_OERR) 2120 if (KYBDLOCK_IS_OERR)
2186 { 2121 {
2187 - kybdlock_clr(KL_OERR_MASK, "Down");  
2188 - status_reset(&h3270); 2122 + kybdlock_clr(hSession,KL_OERR_MASK, "Down");
  2123 + status_reset(hSession);
2189 } else 2124 } else
2190 { 2125 {
2191 ENQUEUE_ACTION(lib3270_cursor_down); 2126 ENQUEUE_ACTION(lib3270_cursor_down);
@@ -2899,7 +2834,7 @@ kybd_scroll_lock(Boolean lock) @@ -2899,7 +2834,7 @@ kybd_scroll_lock(Boolean lock)
2899 if (lock) 2834 if (lock)
2900 kybdlock_set(KL_SCROLLED, "kybd_scroll_lock"); 2835 kybdlock_set(KL_SCROLLED, "kybd_scroll_lock");
2901 else 2836 else
2902 - kybdlock_clr(KL_SCROLLED, "kybd_scroll_lock"); 2837 + kybdlock_clr(&h3270, KL_SCROLLED, "kybd_scroll_lock");
2903 } 2838 }
2904 2839
2905 /* 2840 /*
@@ -43,8 +43,8 @@ LIB3270_INTERNAL void add_xk(KeySym key, KeySym assoc); @@ -43,8 +43,8 @@ LIB3270_INTERNAL void add_xk(KeySym key, KeySym assoc);
43 LIB3270_INTERNAL void clear_xks(void); 43 LIB3270_INTERNAL void clear_xks(void);
44 LIB3270_INTERNAL void do_reset(H3270 *session, Boolean explicit); 44 LIB3270_INTERNAL void do_reset(H3270 *session, Boolean explicit);
45 LIB3270_INTERNAL void hex_input(char *s); 45 LIB3270_INTERNAL void hex_input(char *s);
46 -LIB3270_INTERNAL void kybdlock_clr(unsigned int bits, const char *cause);  
47 -LIB3270_INTERNAL void kybd_inhibit(Boolean inhibit); 46 +LIB3270_INTERNAL void kybdlock_clr(H3270 *session, unsigned int bits, const char *cause);
  47 +LIB3270_INTERNAL void kybd_inhibit(H3270 *session, Boolean inhibit);
48 LIB3270_INTERNAL void kybd_init(void); 48 LIB3270_INTERNAL void kybd_init(void);
49 LIB3270_INTERNAL int kybd_prime(void); 49 LIB3270_INTERNAL int kybd_prime(void);
50 LIB3270_INTERNAL void kybd_scroll_lock(Boolean lock); 50 LIB3270_INTERNAL void kybd_scroll_lock(Boolean lock);
@@ -980,5 +980,5 @@ static void @@ -980,5 +980,5 @@ static void
980 query_reply_end(void) 980 query_reply_end(void)
981 { 981 {
982 net_output(); 982 net_output();
983 - kybd_inhibit(True); 983 + kybd_inhibit(&h3270,True);
984 } 984 }
@@ -1191,7 +1191,7 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1191,7 +1191,7 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1191 cooked_init(); 1191 cooked_init();
1192 #endif /*]*/ 1192 #endif /*]*/
1193 host_in3270(session,CONNECTED_ANSI); 1193 host_in3270(session,CONNECTED_ANSI);
1194 - kybdlock_clr(KL_AWAITING_FIRST, "telnet_fsm"); 1194 + kybdlock_clr(session,KL_AWAITING_FIRST, "telnet_fsm");
1195 status_reset(session); 1195 status_reset(session);
1196 ps_process(); 1196 ps_process();
1197 } 1197 }