Commit 19dabc571b0de44f249dbcd1387e203d904c0bcf

Authored by Perry Werneck
1 parent 63483dc7

Improving keyboard lock status check.

lib3270.cbp
... ... @@ -196,6 +196,7 @@
196 196 <Unit filename="src/include/lib3270/filetransfer.h" />
197 197 <Unit filename="src/include/lib3270/html.h" />
198 198 <Unit filename="src/include/lib3270/internals.h" />
  199 + <Unit filename="src/include/lib3270/keyboard.h" />
199 200 <Unit filename="src/include/lib3270/log.h" />
200 201 <Unit filename="src/include/lib3270/popup.h" />
201 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 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 481 LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds)
509 482 {
510 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 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 342 unsigned int n = hSession->kybdlock & ~( (unsigned int) bits);
343 343  
... ... @@ -2227,3 +2227,26 @@ int kybd_prime(H3270 *hSession)
2227 2227 return len;
2228 2228 }
2229 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 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 61 return hSession->kybdlock;
62 62 }
... ... @@ -242,7 +242,7 @@
242 242 {
243 243 "kybdlock", // Property name.
244 244 N_( "Keyboard lock status" ), // Property description.
245   - lib3270_get_kybdlock, // Get value.
  245 + lib3270_get_kybdlock_as_int, // Get value.
246 246 NULL // Set value.
247 247 },
248 248  
... ...
src/include/kybdc.h
... ... @@ -19,6 +19,7 @@
19 19 #ifndef KYBDC_H_INCLUDED
20 20  
21 21 #define KYBDC_H_INCLUDED
  22 + #include <lib3270/keyboard.h>
22 23  
23 24 /// @brief Element in typeahead queue.
24 25 struct ta
... ... @@ -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 60 #define KL_OERR_MASK LIB3270_KL_OERR_MASK
80 61 #define KL_OERR_PROTECTED LIB3270_KL_OERR_PROTECTED
81 62 #define KL_OERR_NUMERIC LIB3270_KL_OERR_NUMERIC
... ... @@ -97,8 +78,7 @@
97 78 LIB3270_INTERNAL void clear_xks(void);
98 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 83 LIB3270_INTERNAL void kybd_inhibit(H3270 *session, Boolean inhibit);
104 84 LIB3270_INTERNAL int kybd_prime(H3270 *hSession);
... ...
src/include/lib3270.h
... ... @@ -1032,14 +1032,6 @@
1032 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 1035 * "beep" to notify user.
1044 1036 *
1045 1037 * If available play a sound signal do alert user.
... ...
src/include/lib3270/keyboard.h 0 → 100644
... ... @@ -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 +
... ...