Commit 19dabc571b0de44f249dbcd1387e203d904c0bcf

Authored by Perry Werneck
1 parent 63483dc7

Improving keyboard lock status check.

@@ -196,6 +196,7 @@ @@ -196,6 +196,7 @@
196 <Unit filename="src/include/lib3270/filetransfer.h" /> 196 <Unit filename="src/include/lib3270/filetransfer.h" />
197 <Unit filename="src/include/lib3270/html.h" /> 197 <Unit filename="src/include/lib3270/html.h" />
198 <Unit filename="src/include/lib3270/internals.h" /> 198 <Unit filename="src/include/lib3270/internals.h" />
  199 + <Unit filename="src/include/lib3270/keyboard.h" />
199 <Unit filename="src/include/lib3270/log.h" /> 200 <Unit filename="src/include/lib3270/log.h" />
200 <Unit filename="src/include/lib3270/popup.h" /> 201 <Unit filename="src/include/lib3270/popup.h" />
201 <Unit filename="src/include/lib3270/properties.h" /> 202 <Unit filename="src/include/lib3270/properties.h" />
src/core/iocalls.c
@@ -478,33 +478,6 @@ LIB3270_EXPORT int lib3270_wait_for_update(H3270 *hSession, int seconds) @@ -478,33 +478,6 @@ LIB3270_EXPORT int lib3270_wait_for_update(H3270 *hSession, int seconds)
478 return errno = ENOTSUP; 478 return errno = ENOTSUP;
479 } 479 }
480 480
481 -LIB3270_EXPORT int lib3270_wait_for_unlock(H3270 *hSession, int seconds)  
482 -{  
483 - time_t end = time(0)+seconds;  
484 -  
485 - FAIL_IF_NOT_ONLINE(hSession);  
486 -  
487 - event_dispatcher(hSession,0);  
488 -  
489 - do  
490 - {  
491 - if(!lib3270_connected(hSession))  
492 - {  
493 - errno = ENOTCONN;  
494 - return -1;  
495 - }  
496 -  
497 - if(KYBDLOCK_IS_OERR(hSession))  
498 - break;  
499 -  
500 - event_dispatcher(hSession,1);  
501 -  
502 - }  
503 - while(hSession->kybdlock && time(0) < end);  
504 -  
505 - return hSession->kybdlock;  
506 -}  
507 -  
508 LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds) 481 LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds)
509 { 482 {
510 time_t end = time(0)+seconds; 483 time_t end = time(0)+seconds;
src/core/keyboard/kybd.c
@@ -337,7 +337,7 @@ static void kybdlock_set(H3270 *hSession, unsigned int bits) @@ -337,7 +337,7 @@ static void kybdlock_set(H3270 *hSession, unsigned int bits)
337 * @brief Clear bits in the keyboard lock. 337 * @brief Clear bits in the keyboard lock.
338 * 338 *
339 */ 339 */
340 -void lib3270_kybdlock_clear(H3270 *hSession, LIB3270_KL_STATE bits) 340 +void lib3270_kybdlock_clear(H3270 *hSession, LIB3270_KEYBOARD_LOCK_STATE bits)
341 { 341 {
342 unsigned int n = hSession->kybdlock & ~( (unsigned int) bits); 342 unsigned int n = hSession->kybdlock & ~( (unsigned int) bits);
343 343
@@ -2227,3 +2227,26 @@ int kybd_prime(H3270 *hSession) @@ -2227,3 +2227,26 @@ int kybd_prime(H3270 *hSession)
2227 return len; 2227 return len;
2228 } 2228 }
2229 #endif /*]*/ 2229 #endif /*]*/
  2230 +
  2231 +LIB3270_EXPORT LIB3270_KEYBOARD_LOCK_STATE lib3270_wait_for_unlock(H3270 *hSession, int seconds)
  2232 +{
  2233 + time_t end = time(0)+seconds;
  2234 +
  2235 + lib3270_main_iterate(hSession,0);
  2236 +
  2237 + do
  2238 + {
  2239 + if(!lib3270_connected(hSession))
  2240 + return LIB3270_KL_NOT_CONNECTED;
  2241 +
  2242 + if(KYBDLOCK_IS_OERR(hSession))
  2243 + break;
  2244 +
  2245 + lib3270_main_iterate(hSession,1);
  2246 +
  2247 + }
  2248 + while(hSession->kybdlock && time(0) < end);
  2249 +
  2250 + return (LIB3270_KEYBOARD_LOCK_STATE) hSession->kybdlock;
  2251 +}
  2252 +
src/core/properties.c
@@ -56,7 +56,7 @@ @@ -56,7 +56,7 @@
56 return hSession->starting != 0; 56 return hSession->starting != 0;
57 } 57 }
58 58
59 - unsigned int lib3270_get_kybdlock(H3270 *hSession) 59 + unsigned int lib3270_get_kybdlock_as_int(H3270 *hSession)
60 { 60 {
61 return hSession->kybdlock; 61 return hSession->kybdlock;
62 } 62 }
@@ -242,7 +242,7 @@ @@ -242,7 +242,7 @@
242 { 242 {
243 "kybdlock", // Property name. 243 "kybdlock", // Property name.
244 N_( "Keyboard lock status" ), // Property description. 244 N_( "Keyboard lock status" ), // Property description.
245 - lib3270_get_kybdlock, // Get value. 245 + lib3270_get_kybdlock_as_int, // Get value.
246 NULL // Set value. 246 NULL // Set value.
247 }, 247 },
248 248
src/include/kybdc.h
@@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
19 #ifndef KYBDC_H_INCLUDED 19 #ifndef KYBDC_H_INCLUDED
20 20
21 #define KYBDC_H_INCLUDED 21 #define KYBDC_H_INCLUDED
  22 + #include <lib3270/keyboard.h>
22 23
23 /// @brief Element in typeahead queue. 24 /// @brief Element in typeahead queue.
24 struct ta 25 struct ta
@@ -56,26 +57,6 @@ @@ -56,26 +57,6 @@
56 57
57 }; 58 };
58 59
59 -  
60 - /* keyboard lock states */  
61 - typedef enum lib3270_kl_state  
62 - {  
63 - LIB3270_KL_OERR_MASK = 0x000f,  
64 - LIB3270_KL_OERR_PROTECTED = 0x0001,  
65 - LIB3270_KL_OERR_NUMERIC = 0x0002,  
66 - LIB3270_KL_OERR_OVERFLOW = 0x0003,  
67 - LIB3270_KL_OERR_DBCS = 0x0004,  
68 - LIB3270_KL_NOT_CONNECTED = 0x0010,  
69 - LIB3270_KL_AWAITING_FIRST = 0x0020,  
70 - LIB3270_KL_OIA_TWAIT = 0x0040,  
71 - LIB3270_KL_OIA_LOCKED = 0x0080,  
72 - LIB3270_KL_DEFERRED_UNLOCK = 0x0100,  
73 - LIB3270_KL_ENTER_INHIBIT = 0x0200,  
74 - LIB3270_KL_SCROLLED = 0x0400,  
75 - LIB3270_KL_OIA_MINUS = 0x0800  
76 -  
77 - } LIB3270_KL_STATE;  
78 -  
79 #define KL_OERR_MASK LIB3270_KL_OERR_MASK 60 #define KL_OERR_MASK LIB3270_KL_OERR_MASK
80 #define KL_OERR_PROTECTED LIB3270_KL_OERR_PROTECTED 61 #define KL_OERR_PROTECTED LIB3270_KL_OERR_PROTECTED
81 #define KL_OERR_NUMERIC LIB3270_KL_OERR_NUMERIC 62 #define KL_OERR_NUMERIC LIB3270_KL_OERR_NUMERIC
@@ -97,8 +78,7 @@ @@ -97,8 +78,7 @@
97 LIB3270_INTERNAL void clear_xks(void); 78 LIB3270_INTERNAL void clear_xks(void);
98 LIB3270_INTERNAL void do_reset(H3270 *session, Boolean explicit); 79 LIB3270_INTERNAL void do_reset(H3270 *session, Boolean explicit);
99 80
100 - LIB3270_INTERNAL void lib3270_kybdlock_clear(H3270 *hSession, LIB3270_KL_STATE bits);  
101 - 81 + LIB3270_INTERNAL void lib3270_kybdlock_clear(H3270 *hSession, LIB3270_KEYBOARD_LOCK_STATE bits);
102 82
103 LIB3270_INTERNAL void kybd_inhibit(H3270 *session, Boolean inhibit); 83 LIB3270_INTERNAL void kybd_inhibit(H3270 *session, Boolean inhibit);
104 LIB3270_INTERNAL int kybd_prime(H3270 *hSession); 84 LIB3270_INTERNAL int kybd_prime(H3270 *hSession);
src/include/lib3270.h
@@ -1032,14 +1032,6 @@ @@ -1032,14 +1032,6 @@
1032 LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds); 1032 LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds);
1033 1033
1034 /** 1034 /**
1035 - * @brief Wait for keyboard unlock.  
1036 - * @param seconds Number of seconds to wait.  
1037 - *  
1038 - * @return keyboard lock status or -1 on error.  
1039 - */  
1040 - LIB3270_EXPORT int lib3270_wait_for_unlock(H3270 *hSession, int seconds);  
1041 -  
1042 - /**  
1043 * "beep" to notify user. 1035 * "beep" to notify user.
1044 * 1036 *
1045 * If available play a sound signal do alert user. 1037 * If available play a sound signal do alert user.
src/include/lib3270/keyboard.h 0 → 100644
@@ -0,0 +1,75 @@ @@ -0,0 +1,75 @@
  1 +/*
  2 + * Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Contatos:
  22 + *
  23 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  24 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  25 + *
  26 + */
  27 +
  28 +#ifndef LIB3270_KEYBOARD_H_INCLUDED
  29 +
  30 + #define LIB3270_KEYBOARD_H_INCLUDED 1
  31 +
  32 +#ifdef __cplusplus
  33 + extern "C" {
  34 +#endif
  35 +
  36 + /**
  37 + * @brief keyboard lock states
  38 + */
  39 + typedef enum lib3270_keyboard_lock_state
  40 + {
  41 + // Operator errors
  42 + LIB3270_KL_OERR_MASK = 0x000f,
  43 + LIB3270_KL_OERR_PROTECTED = 0x0001,
  44 + LIB3270_KL_OERR_NUMERIC = 0x0002,
  45 + LIB3270_KL_OERR_OVERFLOW = 0x0003,
  46 + LIB3270_KL_OERR_DBCS = 0x0004,
  47 +
  48 + LIB3270_KL_NOT_CONNECTED = 0x0010,
  49 + LIB3270_KL_AWAITING_FIRST = 0x0020,
  50 + LIB3270_KL_OIA_TWAIT = 0x0040,
  51 + LIB3270_KL_OIA_LOCKED = 0x0080,
  52 + LIB3270_KL_DEFERRED_UNLOCK = 0x0100,
  53 + LIB3270_KL_ENTER_INHIBIT = 0x0200,
  54 + LIB3270_KL_SCROLLED = 0x0400,
  55 + LIB3270_KL_OIA_MINUS = 0x0800
  56 +
  57 + } LIB3270_KEYBOARD_LOCK_STATE;
  58 +
  59 + /**
  60 + * @brief Wait for keyboard unlock.
  61 + *
  62 + * Return status if the keyboard is locked by operator error ou if disconnected from host, waits until keyboard is unlocked if not.
  63 + *
  64 + * @param seconds Number of seconds to wait.
  65 + *
  66 + * @return keyboard lock status.
  67 + */
  68 + LIB3270_EXPORT LIB3270_KEYBOARD_LOCK_STATE lib3270_wait_for_unlock(H3270 *hSession, int seconds);
  69 +
  70 +#ifdef __cplusplus
  71 + }
  72 +#endif
  73 +
  74 +#endif // LIB3270_KEYBOARD_H_INCLUDED
  75 +