diff --git a/src/core/set.cc b/src/core/set.cc index ff3c245..8848dd4 100644 --- a/src/core/set.cc +++ b/src/core/set.cc @@ -44,27 +44,70 @@ TN3270::Host &host = getSession(); - kLock = host.waitForKeyboardUnlock(); - - if(kLock == LIB3270_KL_UNLOCKED) { - - try { - - worker(host); - return HLLAPI_STATUS_SUCCESS; - - } catch(const std::exception &e) { - - // Worker has failed! - - hllapi_lasterror = e.what(); - } - - // Failed! Get lock state. - kLock = host.getKeyboardLockState(); - + switch(host.waitForKeyboardUnlock()) { + case LIB3270_KL_UNLOCKED: + worker(host); + break; + + case LIB3270_KL_NOT_CONNECTED: + hllapi_lasterror = _("Not connected to host"); + return HLLAPI_STATUS_DISCONNECTED; + + case LIB3270_KL_OERR_MASK: + hllapi_lasterror = _("LIB3270_KL_OERR_MASK"); + return HLLAPI_STATUS_KEYBOARD_LOCKED; + + case LIB3270_KL_OERR_PROTECTED: + hllapi_lasterror = _("LIB3270_KL_OERR_PROTECTED"); + return HLLAPI_STATUS_KEYBOARD_LOCKED; + + case LIB3270_KL_OERR_NUMERIC: + hllapi_lasterror = _("LIB3270_KL_OERR_NUMERIC"); + return HLLAPI_STATUS_KEYBOARD_LOCKED; + + case LIB3270_KL_OERR_OVERFLOW: + hllapi_lasterror = _("LIB3270_KL_OERR_OVERFLOW"); + return HLLAPI_STATUS_KEYBOARD_LOCKED; + + case LIB3270_KL_OERR_DBCS: + hllapi_lasterror = _("LIB3270_KL_OERR_DBCS"); + return HLLAPI_STATUS_KEYBOARD_LOCKED; + + case LIB3270_KL_AWAITING_FIRST: + hllapi_lasterror = _("LIB3270_KL_AWAITING_FIRST"); + return HLLAPI_STATUS_KEYBOARD_LOCKED; + + case LIB3270_KL_OIA_TWAIT: + hllapi_lasterror = _("LIB3270_KL_OIA_TWAIT"); + return HLLAPI_STATUS_KEYBOARD_LOCKED; + + case LIB3270_KL_OIA_LOCKED: + hllapi_lasterror = _("LIB3270_KL_OIA_LOCKED"); + return HLLAPI_STATUS_KEYBOARD_LOCKED; + + case LIB3270_KL_DEFERRED_UNLOCK: + hllapi_lasterror = _("LIB3270_KL_DEFERRED_UNLOCK"); + return HLLAPI_STATUS_KEYBOARD_LOCKED; + + case LIB3270_KL_ENTER_INHIBIT: + hllapi_lasterror = _("LIB3270_KL_ENTER_INHIBIT"); + return HLLAPI_STATUS_KEYBOARD_LOCKED; + + case LIB3270_KL_SCROLLED: + hllapi_lasterror = _("LIB3270_KL_SCROLLED"); + return HLLAPI_STATUS_KEYBOARD_LOCKED; + + case LIB3270_KL_OIA_MINUS: + hllapi_lasterror = _("LIB3270_KL_OIA_MINUS"); + return HLLAPI_STATUS_KEYBOARD_LOCKED; + + default: + hllapi_lasterror = _("Unexpected error waiting for keyboard unlock"); + return HLLAPI_STATUS_SYSTEM_ERROR; } + return HLLAPI_STATUS_SUCCESS; + } catch(const std::system_error &e) { return hllapi_translate_error(e); -- libgit2 0.21.2