Commit 63483dc70f43cf246b1c06d69108a48065bbaf62
1 parent
2938cc60
Exists in
master
and in
3 other branches
Adding APIs to get keyboard lock state.
Showing
10 changed files
with
73 additions
and
23 deletions
Show diff stats
sdk/lib3270-delayed.pc.in
... | ... | @@ -13,5 +13,5 @@ Description: @PACKAGE_DESCRIPTION@ |
13 | 13 | Version: @PACKAGE_VERSION@ |
14 | 14 | Libs: -L\@libdir@ -l@LIB3270_NAME@.delayed |
15 | 15 | Libs.private: @LIBS@ @LIBSSL_LIBS@ @LIBICONV@ @INTL_LIBS@ @LDAP_LIBS@ @LIBCURL_LIBS@ |
16 | -Cflags: -I@includedir@ -DLIB3270_NAME=@LIB3270_NAME@ | |
16 | +Cflags: -DLIB3270_NAME=@LIB3270_NAME@ | |
17 | 17 | ... | ... |
sdk/lib3270-static.pc.in
... | ... | @@ -11,5 +11,5 @@ Name: @PACKAGE_NAME@-static |
11 | 11 | Description: @PACKAGE_DESCRIPTION@ (static library) |
12 | 12 | Version: @PACKAGE_VERSION@ |
13 | 13 | Libs: -L\@libdir@ -l@LIB3270_NAME@.static @LIBS@ @LIBSSL_LIBS@ @LIBICONV@ @INTL_LIBS@ @LDAP_LIBS@ @LIBCURL_LIBS@ |
14 | -Cflags: -I@includedir@ | |
14 | +Cflags: -DLIB3270_NAME=@LIB3270_NAME@ | |
15 | 15 | ... | ... |
sdk/lib3270.pc.in
... | ... | @@ -13,5 +13,5 @@ Description: @PACKAGE_DESCRIPTION@ |
13 | 13 | Version: @PACKAGE_VERSION@ |
14 | 14 | Libs: -L\@libdir@ -l@LIB3270_NAME@ |
15 | 15 | Libs.private: @LIBS@ @LIBSSL_LIBS@ @LIBICONV@ @INTL_LIBS@ @LDAP_LIBS@ @LIBCURL_LIBS@ |
16 | -Cflags: -I@includedir@ | |
16 | +Cflags: -DLIB3270_NAME=@LIB3270_NAME@ | |
17 | 17 | ... | ... |
src/core/ctlr.c
... | ... | @@ -116,9 +116,8 @@ static const unsigned char code_table[64] = |
116 | 116 | } \ |
117 | 117 | } |
118 | 118 | |
119 | - | |
120 | -/* | |
121 | - * Initialize the emulated 3270 hardware. | |
119 | +/** | |
120 | + * @brief Initialize the emulated 3270 hardware. | |
122 | 121 | */ |
123 | 122 | void ctlr_init(H3270 *session, unsigned GNUC_UNUSED(cmask)) |
124 | 123 | { |
... | ... | @@ -127,8 +126,9 @@ void ctlr_init(H3270 *session, unsigned GNUC_UNUSED(cmask)) |
127 | 126 | lib3270_register_schange(session,LIB3270_STATE_CONNECT, ctlr_connect, 0); |
128 | 127 | lib3270_register_schange(session,LIB3270_STATE_3270_MODE, ctlr_connect, 0); |
129 | 128 | } |
130 | -/* | |
131 | - * Reinitialize the emulated 3270 hardware. | |
129 | + | |
130 | +/** | |
131 | + * @brief Reinitialize the emulated 3270 hardware. | |
132 | 132 | */ |
133 | 133 | void ctlr_reinit(H3270 *session, unsigned cmask) |
134 | 134 | { |
... | ... | @@ -153,7 +153,7 @@ void ctlr_reinit(H3270 *session, unsigned cmask) |
153 | 153 | } |
154 | 154 | |
155 | 155 | /** |
156 | - * Parse the model number. | |
156 | + * @brief Parse the model number. | |
157 | 157 | * |
158 | 158 | * @param session Session Handle. |
159 | 159 | * @param m Model number. |
... | ... | @@ -231,7 +231,7 @@ static int parse_model_number(H3270 *session, const char *m) |
231 | 231 | } |
232 | 232 | |
233 | 233 | /** |
234 | - * Get current 3270 model. | |
234 | + * @brief Get current 3270 model. | |
235 | 235 | * |
236 | 236 | * @param hSession selected 3270 session. |
237 | 237 | * @return Current model number. |
... | ... | @@ -366,7 +366,7 @@ static void set_formatted(H3270 *hSession, int state) |
366 | 366 | } |
367 | 367 | |
368 | 368 | /** |
369 | - * Update the formatted screen flag. | |
369 | + * @brief Update the formatted screen flag. | |
370 | 370 | * |
371 | 371 | * A formatted screen is a screen that has at least one field somewhere on it. |
372 | 372 | * |
... | ... | @@ -787,8 +787,8 @@ enum pds process_ds(H3270 *hSession, unsigned char *buf, int buflen) |
787 | 787 | } |
788 | 788 | } |
789 | 789 | |
790 | -/* | |
791 | - * Functions to insert SA attributes into the inbound data stream. | |
790 | +/** | |
791 | + * @brief Functions to insert SA attributes into the inbound data stream. | |
792 | 792 | */ |
793 | 793 | static void insert_sa1(H3270 *hSession, unsigned char attr, unsigned char value, unsigned char *currentp, Boolean *anyp) |
794 | 794 | { |
... | ... | @@ -805,11 +805,10 @@ static void insert_sa1(H3270 *hSession, unsigned char attr, unsigned char value, |
805 | 805 | *anyp = False; |
806 | 806 | } |
807 | 807 | |
808 | -/* | |
809 | - * Translate an internal character set number to a 3270DS characte set number. | |
808 | +/** | |
809 | + * @brief Translate an internal character set number to a 3270DS characte set number. | |
810 | 810 | */ |
811 | -static unsigned char | |
812 | -host_cs(unsigned char cs) | |
811 | +static unsigned char host_cs(unsigned char cs) | |
813 | 812 | { |
814 | 813 | switch (cs & CS_MASK) { |
815 | 814 | case CS_APL: |
... | ... | @@ -851,7 +850,7 @@ static void insert_sa(H3270 *hSession, int baddr, unsigned char *current_fgp, un |
851 | 850 | |
852 | 851 | |
853 | 852 | /** |
854 | - * Process a 3270 Read-Modified command and transmit the data back to the host. | |
853 | + * @brief Process a 3270 Read-Modified command and transmit the data back to the host. | |
855 | 854 | */ |
856 | 855 | void ctlr_read_modified(H3270 *hSession, unsigned char aid_byte, Boolean all) |
857 | 856 | { | ... | ... |
src/core/iocalls.c
... | ... | @@ -35,6 +35,7 @@ |
35 | 35 | #include "xioc.h" |
36 | 36 | #include "telnetc.h" |
37 | 37 | #include "utilc.h" |
38 | +#include "kybdc.h" | |
38 | 39 | |
39 | 40 | #if defined(_WIN32) |
40 | 41 | #include <ws2tcpip.h> |
... | ... | @@ -477,6 +478,33 @@ LIB3270_EXPORT int lib3270_wait_for_update(H3270 *hSession, int seconds) |
477 | 478 | return errno = ENOTSUP; |
478 | 479 | } |
479 | 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 | + | |
480 | 508 | LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds) |
481 | 509 | { |
482 | 510 | time_t end = time(0)+seconds; |
... | ... | @@ -484,6 +512,11 @@ LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds) |
484 | 512 | FAIL_IF_NOT_ONLINE(hSession); |
485 | 513 | |
486 | 514 | event_dispatcher(hSession,0); |
515 | + | |
516 | + // Keyboard is locked by operator error, fails! | |
517 | + if(hSession->kybdlock && KYBDLOCK_IS_OERR(hSession)) | |
518 | + return -1; | |
519 | + | |
487 | 520 | do |
488 | 521 | { |
489 | 522 | if(!lib3270_lock_status(hSession)) | ... | ... |
src/core/keyboard/kybd.c
... | ... | @@ -478,6 +478,7 @@ static void key_AID(H3270 *hSession, unsigned char aid_code) |
478 | 478 | { |
479 | 479 | if (hSession->kybdlock & KL_OIA_MINUS) |
480 | 480 | return; |
481 | + | |
481 | 482 | if (aid_code != AID_ENTER && aid_code != AID_CLEAR) |
482 | 483 | { |
483 | 484 | status_changed(hSession,LIB3270_MESSAGE_MINUS); |
... | ... | @@ -499,6 +500,7 @@ static void key_AID(H3270 *hSession, unsigned char aid_code) |
499 | 500 | lib3270_set_toggle(hSession,LIB3270_TOGGLE_INSERT,0); |
500 | 501 | kybdlock_set(hSession,KL_OIA_TWAIT | KL_OIA_LOCKED); |
501 | 502 | } |
503 | + | |
502 | 504 | hSession->aid = aid_code; |
503 | 505 | ctlr_read_modified(hSession, hSession->aid, False); |
504 | 506 | ticking_start(hSession,False); | ... | ... |
src/core/properties.c
... | ... | @@ -56,6 +56,11 @@ |
56 | 56 | return hSession->starting != 0; |
57 | 57 | } |
58 | 58 | |
59 | + unsigned int lib3270_get_kybdlock(H3270 *hSession) | |
60 | + { | |
61 | + return hSession->kybdlock; | |
62 | + } | |
63 | + | |
59 | 64 | const LIB3270_INT_PROPERTY * lib3270_get_boolean_properties_list(void) |
60 | 65 | { |
61 | 66 | |
... | ... | @@ -234,6 +239,13 @@ |
234 | 239 | lib3270_set_unlock_delay // Set value. |
235 | 240 | }, |
236 | 241 | |
242 | + { | |
243 | + "kybdlock", // Property name. | |
244 | + N_( "Keyboard lock status" ), // Property description. | |
245 | + lib3270_get_kybdlock, // Get value. | |
246 | + NULL // Set value. | |
247 | + }, | |
248 | + | |
237 | 249 | /* |
238 | 250 | { |
239 | 251 | "", // Property name. | ... | ... |
src/include/kybdc.h
... | ... | @@ -101,7 +101,7 @@ |
101 | 101 | |
102 | 102 | |
103 | 103 | LIB3270_INTERNAL void kybd_inhibit(H3270 *session, Boolean inhibit); |
104 | - LIB3270_INTERNAL int kybd_prime(H3270 *hSession); | |
104 | + LIB3270_INTERNAL int kybd_prime(H3270 *hSession); | |
105 | 105 | LIB3270_INTERNAL void kybd_scroll_lock(Boolean lock); |
106 | 106 | LIB3270_INTERNAL void kybd_connect(H3270 *session, int connected, void *dunno); |
107 | 107 | LIB3270_INTERNAL void kybd_in3270(H3270 *session, int in3270, void *dunno); | ... | ... |
src/include/lib3270.h
... | ... | @@ -1032,6 +1032,14 @@ |
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 | + /** | |
1035 | 1043 | * "beep" to notify user. |
1036 | 1044 | * |
1037 | 1045 | * If available play a sound signal do alert user. | ... | ... |
src/include/statusc.h
... | ... | @@ -26,11 +26,7 @@ LIB3270_INTERNAL void status_oerr(H3270 *session, int error_type); |
26 | 26 | LIB3270_INTERNAL void status_reset(H3270 *session); |
27 | 27 | LIB3270_INTERNAL void status_twait(H3270 *session); |
28 | 28 | |
29 | - | |
30 | - | |
31 | - | |
32 | 29 | LIB3270_INTERNAL void status_changed(H3270 *session, LIB3270_MESSAGE id); |
33 | - | |
34 | 30 | LIB3270_INTERNAL void set_status(H3270 *session, LIB3270_FLAG id, Boolean on); |
35 | 31 | |
36 | 32 | ... | ... |