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,5 +13,5 @@ Description: @PACKAGE_DESCRIPTION@ | ||
13 | Version: @PACKAGE_VERSION@ | 13 | Version: @PACKAGE_VERSION@ |
14 | Libs: -L\@libdir@ -l@LIB3270_NAME@.delayed | 14 | Libs: -L\@libdir@ -l@LIB3270_NAME@.delayed |
15 | Libs.private: @LIBS@ @LIBSSL_LIBS@ @LIBICONV@ @INTL_LIBS@ @LDAP_LIBS@ @LIBCURL_LIBS@ | 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,5 +11,5 @@ Name: @PACKAGE_NAME@-static | ||
11 | Description: @PACKAGE_DESCRIPTION@ (static library) | 11 | Description: @PACKAGE_DESCRIPTION@ (static library) |
12 | Version: @PACKAGE_VERSION@ | 12 | Version: @PACKAGE_VERSION@ |
13 | Libs: -L\@libdir@ -l@LIB3270_NAME@.static @LIBS@ @LIBSSL_LIBS@ @LIBICONV@ @INTL_LIBS@ @LDAP_LIBS@ @LIBCURL_LIBS@ | 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,5 +13,5 @@ Description: @PACKAGE_DESCRIPTION@ | ||
13 | Version: @PACKAGE_VERSION@ | 13 | Version: @PACKAGE_VERSION@ |
14 | Libs: -L\@libdir@ -l@LIB3270_NAME@ | 14 | Libs: -L\@libdir@ -l@LIB3270_NAME@ |
15 | Libs.private: @LIBS@ @LIBSSL_LIBS@ @LIBICONV@ @INTL_LIBS@ @LDAP_LIBS@ @LIBCURL_LIBS@ | 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,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 | void ctlr_init(H3270 *session, unsigned GNUC_UNUSED(cmask)) | 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,8 +126,9 @@ void ctlr_init(H3270 *session, unsigned GNUC_UNUSED(cmask)) | ||
127 | lib3270_register_schange(session,LIB3270_STATE_CONNECT, ctlr_connect, 0); | 126 | lib3270_register_schange(session,LIB3270_STATE_CONNECT, ctlr_connect, 0); |
128 | lib3270_register_schange(session,LIB3270_STATE_3270_MODE, ctlr_connect, 0); | 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 | void ctlr_reinit(H3270 *session, unsigned cmask) | 133 | void ctlr_reinit(H3270 *session, unsigned cmask) |
134 | { | 134 | { |
@@ -153,7 +153,7 @@ void ctlr_reinit(H3270 *session, unsigned cmask) | @@ -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 | * @param session Session Handle. | 158 | * @param session Session Handle. |
159 | * @param m Model number. | 159 | * @param m Model number. |
@@ -231,7 +231,7 @@ static int parse_model_number(H3270 *session, const char *m) | @@ -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 | * @param hSession selected 3270 session. | 236 | * @param hSession selected 3270 session. |
237 | * @return Current model number. | 237 | * @return Current model number. |
@@ -366,7 +366,7 @@ static void set_formatted(H3270 *hSession, int state) | @@ -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 | * A formatted screen is a screen that has at least one field somewhere on it. | 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,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 | static void insert_sa1(H3270 *hSession, unsigned char attr, unsigned char value, unsigned char *currentp, Boolean *anyp) | 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,11 +805,10 @@ static void insert_sa1(H3270 *hSession, unsigned char attr, unsigned char value, | ||
805 | *anyp = False; | 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 | switch (cs & CS_MASK) { | 813 | switch (cs & CS_MASK) { |
815 | case CS_APL: | 814 | case CS_APL: |
@@ -851,7 +850,7 @@ static void insert_sa(H3270 *hSession, int baddr, unsigned char *current_fgp, un | @@ -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 | void ctlr_read_modified(H3270 *hSession, unsigned char aid_byte, Boolean all) | 855 | void ctlr_read_modified(H3270 *hSession, unsigned char aid_byte, Boolean all) |
857 | { | 856 | { |
src/core/iocalls.c
@@ -35,6 +35,7 @@ | @@ -35,6 +35,7 @@ | ||
35 | #include "xioc.h" | 35 | #include "xioc.h" |
36 | #include "telnetc.h" | 36 | #include "telnetc.h" |
37 | #include "utilc.h" | 37 | #include "utilc.h" |
38 | +#include "kybdc.h" | ||
38 | 39 | ||
39 | #if defined(_WIN32) | 40 | #if defined(_WIN32) |
40 | #include <ws2tcpip.h> | 41 | #include <ws2tcpip.h> |
@@ -477,6 +478,33 @@ LIB3270_EXPORT int lib3270_wait_for_update(H3270 *hSession, int seconds) | @@ -477,6 +478,33 @@ LIB3270_EXPORT int lib3270_wait_for_update(H3270 *hSession, int seconds) | ||
477 | return errno = ENOTSUP; | 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 | LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds) | 508 | LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds) |
481 | { | 509 | { |
482 | time_t end = time(0)+seconds; | 510 | time_t end = time(0)+seconds; |
@@ -484,6 +512,11 @@ LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds) | @@ -484,6 +512,11 @@ LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds) | ||
484 | FAIL_IF_NOT_ONLINE(hSession); | 512 | FAIL_IF_NOT_ONLINE(hSession); |
485 | 513 | ||
486 | event_dispatcher(hSession,0); | 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 | do | 520 | do |
488 | { | 521 | { |
489 | if(!lib3270_lock_status(hSession)) | 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,6 +478,7 @@ static void key_AID(H3270 *hSession, unsigned char aid_code) | ||
478 | { | 478 | { |
479 | if (hSession->kybdlock & KL_OIA_MINUS) | 479 | if (hSession->kybdlock & KL_OIA_MINUS) |
480 | return; | 480 | return; |
481 | + | ||
481 | if (aid_code != AID_ENTER && aid_code != AID_CLEAR) | 482 | if (aid_code != AID_ENTER && aid_code != AID_CLEAR) |
482 | { | 483 | { |
483 | status_changed(hSession,LIB3270_MESSAGE_MINUS); | 484 | status_changed(hSession,LIB3270_MESSAGE_MINUS); |
@@ -499,6 +500,7 @@ static void key_AID(H3270 *hSession, unsigned char aid_code) | @@ -499,6 +500,7 @@ static void key_AID(H3270 *hSession, unsigned char aid_code) | ||
499 | lib3270_set_toggle(hSession,LIB3270_TOGGLE_INSERT,0); | 500 | lib3270_set_toggle(hSession,LIB3270_TOGGLE_INSERT,0); |
500 | kybdlock_set(hSession,KL_OIA_TWAIT | KL_OIA_LOCKED); | 501 | kybdlock_set(hSession,KL_OIA_TWAIT | KL_OIA_LOCKED); |
501 | } | 502 | } |
503 | + | ||
502 | hSession->aid = aid_code; | 504 | hSession->aid = aid_code; |
503 | ctlr_read_modified(hSession, hSession->aid, False); | 505 | ctlr_read_modified(hSession, hSession->aid, False); |
504 | ticking_start(hSession,False); | 506 | ticking_start(hSession,False); |
src/core/properties.c
@@ -56,6 +56,11 @@ | @@ -56,6 +56,11 @@ | ||
56 | return hSession->starting != 0; | 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 | const LIB3270_INT_PROPERTY * lib3270_get_boolean_properties_list(void) | 64 | const LIB3270_INT_PROPERTY * lib3270_get_boolean_properties_list(void) |
60 | { | 65 | { |
61 | 66 | ||
@@ -234,6 +239,13 @@ | @@ -234,6 +239,13 @@ | ||
234 | lib3270_set_unlock_delay // Set value. | 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 | "", // Property name. | 251 | "", // Property name. |
src/include/kybdc.h
@@ -101,7 +101,7 @@ | @@ -101,7 +101,7 @@ | ||
101 | 101 | ||
102 | 102 | ||
103 | LIB3270_INTERNAL void kybd_inhibit(H3270 *session, Boolean inhibit); | 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 | LIB3270_INTERNAL void kybd_scroll_lock(Boolean lock); | 105 | LIB3270_INTERNAL void kybd_scroll_lock(Boolean lock); |
106 | LIB3270_INTERNAL void kybd_connect(H3270 *session, int connected, void *dunno); | 106 | LIB3270_INTERNAL void kybd_connect(H3270 *session, int connected, void *dunno); |
107 | LIB3270_INTERNAL void kybd_in3270(H3270 *session, int in3270, void *dunno); | 107 | LIB3270_INTERNAL void kybd_in3270(H3270 *session, int in3270, void *dunno); |
src/include/lib3270.h
@@ -1032,6 +1032,14 @@ | @@ -1032,6 +1032,14 @@ | ||
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 | + /** | ||
1035 | * "beep" to notify user. | 1043 | * "beep" to notify user. |
1036 | * | 1044 | * |
1037 | * If available play a sound signal do alert user. | 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,11 +26,7 @@ LIB3270_INTERNAL void status_oerr(H3270 *session, int error_type); | ||
26 | LIB3270_INTERNAL void status_reset(H3270 *session); | 26 | LIB3270_INTERNAL void status_reset(H3270 *session); |
27 | LIB3270_INTERNAL void status_twait(H3270 *session); | 27 | LIB3270_INTERNAL void status_twait(H3270 *session); |
28 | 28 | ||
29 | - | ||
30 | - | ||
31 | - | ||
32 | LIB3270_INTERNAL void status_changed(H3270 *session, LIB3270_MESSAGE id); | 29 | LIB3270_INTERNAL void status_changed(H3270 *session, LIB3270_MESSAGE id); |
33 | - | ||
34 | LIB3270_INTERNAL void set_status(H3270 *session, LIB3270_FLAG id, Boolean on); | 30 | LIB3270_INTERNAL void set_status(H3270 *session, LIB3270_FLAG id, Boolean on); |
35 | 31 | ||
36 | 32 |