Commit d021aee617ab89dc04ebfacbdf6c387d845c142d
1 parent
aee80d5f
Exists in
master
and in
3 other branches
Updating API definitions.
Showing
8 changed files
with
83 additions
and
22 deletions
Show diff stats
lib3270.cbp
| @@ -108,6 +108,15 @@ | @@ -108,6 +108,15 @@ | ||
| 108 | <Unit filename="src/include/winversc.h" /> | 108 | <Unit filename="src/include/winversc.h" /> |
| 109 | <Unit filename="src/include/xioc.h" /> | 109 | <Unit filename="src/include/xioc.h" /> |
| 110 | <Unit filename="src/include/xl.h" /> | 110 | <Unit filename="src/include/xl.h" /> |
| 111 | + <Unit filename="src/lib3270++/abstract.cc" /> | ||
| 112 | + <Unit filename="src/lib3270++/events.cc" /> | ||
| 113 | + <Unit filename="src/lib3270++/host.cc" /> | ||
| 114 | + <Unit filename="src/lib3270++/local/events.cc" /> | ||
| 115 | + <Unit filename="src/lib3270++/local/session.cc" /> | ||
| 116 | + <Unit filename="src/lib3270++/private.h" /> | ||
| 117 | + <Unit filename="src/lib3270++/session.cc" /> | ||
| 118 | + <Unit filename="src/lib3270++/testprogram/testprogram.cc" /> | ||
| 119 | + <Unit filename="src/lib3270++/windows/resources.rc" /> | ||
| 111 | <Unit filename="src/lib3270/actions.c"> | 120 | <Unit filename="src/lib3270/actions.c"> |
| 112 | <Option compilerVar="CC" /> | 121 | <Option compilerVar="CC" /> |
| 113 | </Unit> | 122 | </Unit> |
src/include/lib3270++.h
| @@ -297,8 +297,8 @@ | @@ -297,8 +297,8 @@ | ||
| 297 | return session->getProgramMessage(); | 297 | return session->getProgramMessage(); |
| 298 | } | 298 | } |
| 299 | 299 | ||
| 300 | - inline bool isReady() const { | ||
| 301 | - return getProgramMessage() == MESSAGE_NONE; | 300 | + inline operator bool() const { |
| 301 | + return isConnected() && isReady(); | ||
| 302 | } | 302 | } |
| 303 | 303 | ||
| 304 | inline operator ProgramMessage() const { | 304 | inline operator ProgramMessage() const { |
| @@ -309,9 +309,8 @@ | @@ -309,9 +309,8 @@ | ||
| 309 | return session->getConnectionState(); | 309 | return session->getConnectionState(); |
| 310 | } | 310 | } |
| 311 | 311 | ||
| 312 | - inline bool isConnected() const { | ||
| 313 | - return getConnectionState() == CONNECTED_TN3270E; | ||
| 314 | - } | 312 | + bool isReady() const; |
| 313 | + bool isConnected() const; | ||
| 315 | 314 | ||
| 316 | inline operator ConnectionState() const { | 315 | inline operator ConnectionState() const { |
| 317 | return getConnectionState(); | 316 | return getConnectionState(); |
src/include/lib3270.h
| @@ -615,7 +615,20 @@ | @@ -615,7 +615,20 @@ | ||
| 615 | LIB3270_EXPORT int lib3270_set_string(H3270 *h, const unsigned char *str); | 615 | LIB3270_EXPORT int lib3270_set_string(H3270 *h, const unsigned char *str); |
| 616 | 616 | ||
| 617 | #define lib3270_set_text_at(h,r,c,t) lib3270_set_string_at(h,r,c,t) | 617 | #define lib3270_set_text_at(h,r,c,t) lib3270_set_string_at(h,r,c,t) |
| 618 | - LIB3270_EXPORT int lib3270_set_string_at(H3270 *h, int row, int col, const unsigned char *str); | 618 | + |
| 619 | + /** | ||
| 620 | + * @brief Set string at defined position. | ||
| 621 | + * | ||
| 622 | + * @param hSession Session handle. | ||
| 623 | + * @param row Row for the first character. | ||
| 624 | + * @param col Col for the first character. | ||
| 625 | + * @param str String to set. | ||
| 626 | + * | ||
| 627 | + * @return Negative if error or number of processed characters. | ||
| 628 | + * | ||
| 629 | + */ | ||
| 630 | + LIB3270_EXPORT int lib3270_set_string_at(H3270 *hSession, int row, int col, const unsigned char *str); | ||
| 631 | + | ||
| 619 | LIB3270_EXPORT int lib3270_input_string(H3270 *hSession, const unsigned char *str); | 632 | LIB3270_EXPORT int lib3270_input_string(H3270 *hSession, const unsigned char *str); |
| 620 | 633 | ||
| 621 | /** | 634 | /** |
src/lib3270++/host.cc
| @@ -90,6 +90,16 @@ | @@ -90,6 +90,16 @@ | ||
| 90 | return *this; | 90 | return *this; |
| 91 | } | 91 | } |
| 92 | 92 | ||
| 93 | + bool Host::isReady() const { | ||
| 94 | + this->session->waitForReady(this->timeout); | ||
| 95 | + return getProgramMessage() == MESSAGE_NONE; | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + bool Host::isConnected() const { | ||
| 99 | + this->session->waitForReady(this->timeout); | ||
| 100 | + return getConnectionState() == CONNECTED_TN3270E; | ||
| 101 | + } | ||
| 102 | + | ||
| 93 | std::string Host::toString() const { | 103 | std::string Host::toString() const { |
| 94 | 104 | ||
| 95 | this->session->waitForReady(this->timeout); | 105 | this->session->waitForReady(this->timeout); |
src/lib3270++/local/session.cc
| @@ -268,7 +268,9 @@ | @@ -268,7 +268,9 @@ | ||
| 268 | baddr = lib3270_get_next_unprotected(hSession,0); | 268 | baddr = lib3270_get_next_unprotected(hSession,0); |
| 269 | } | 269 | } |
| 270 | 270 | ||
| 271 | - lib3270_set_cursor_address(hSession,baddr); | 271 | + if(lib3270_set_cursor_address(hSession,baddr)) { |
| 272 | + throw std::system_error(errno, std::system_category()); | ||
| 273 | + } | ||
| 272 | 274 | ||
| 273 | return *this; | 275 | return *this; |
| 274 | } | 276 | } |
| @@ -278,12 +280,10 @@ | @@ -278,12 +280,10 @@ | ||
| 278 | /// @param addr Cursor address. | 280 | /// @param addr Cursor address. |
| 279 | void Local::Session::setCursorPosition(unsigned short addr) { | 281 | void Local::Session::setCursorPosition(unsigned short addr) { |
| 280 | 282 | ||
| 281 | - if(!lib3270_is_connected(hSession)) { | ||
| 282 | - throw std::system_error(ENOTCONN, std::system_category()); | 283 | + if(lib3270_set_cursor_address(hSession,addr) < 0) { |
| 284 | + throw std::system_error(errno, std::system_category()); | ||
| 283 | } | 285 | } |
| 284 | 286 | ||
| 285 | - lib3270_set_cursor_address(hSession,baddr); | ||
| 286 | - | ||
| 287 | } | 287 | } |
| 288 | 288 | ||
| 289 | /// @brief Set cursor position. | 289 | /// @brief Set cursor position. |
| @@ -292,11 +292,10 @@ | @@ -292,11 +292,10 @@ | ||
| 292 | /// @param col New cursor column. | 292 | /// @param col New cursor column. |
| 293 | void Local::Session::setCursorPosition(unsigned short row, unsigned short col) { | 293 | void Local::Session::setCursorPosition(unsigned short row, unsigned short col) { |
| 294 | 294 | ||
| 295 | - if(!lib3270_is_connected(hSession)) { | ||
| 296 | - throw std::system_error(ENOTCONN, std::system_category()); | 295 | + if(lib3270_set_cursor_position(hSession,row,col)) { |
| 296 | + throw std::system_error(errno, std::system_category()); | ||
| 297 | } | 297 | } |
| 298 | 298 | ||
| 299 | - lib3270_set_cursor_position(hSession,row,col); | ||
| 300 | } | 299 | } |
| 301 | 300 | ||
| 302 | 301 |
src/lib3270/kybd.c
| @@ -974,6 +974,8 @@ static Boolean key_Character(H3270 *hSession, int code, Boolean with_ge, Boolean | @@ -974,6 +974,8 @@ static Boolean key_Character(H3270 *hSession, int code, Boolean with_ge, Boolean | ||
| 974 | 974 | ||
| 975 | LIB3270_EXPORT int lib3270_input_string(H3270 *hSession, const unsigned char *str) | 975 | LIB3270_EXPORT int lib3270_input_string(H3270 *hSession, const unsigned char *str) |
| 976 | { | 976 | { |
| 977 | + FAIL_IF_NOT_ONLINE(hSession); | ||
| 978 | + | ||
| 977 | while(*str) | 979 | while(*str) |
| 978 | { | 980 | { |
| 979 | key_ACharacter(hSession,(unsigned char)((*str) & 0xff), KT_STD, IA_KEY, NULL); | 981 | key_ACharacter(hSession,(unsigned char)((*str) & 0xff), KT_STD, IA_KEY, NULL); |
| @@ -986,7 +988,7 @@ LIB3270_EXPORT int lib3270_input_string(H3270 *hSession, const unsigned char *st | @@ -986,7 +988,7 @@ LIB3270_EXPORT int lib3270_input_string(H3270 *hSession, const unsigned char *st | ||
| 986 | } | 988 | } |
| 987 | 989 | ||
| 988 | /** | 990 | /** |
| 989 | - * Handle an ordinary character key, given an ASCII code. | 991 | + * @brief Handle an ordinary character key, given an ASCII code. |
| 990 | * | 992 | * |
| 991 | */ | 993 | */ |
| 992 | void key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum iaction cause,Boolean *skipped) | 994 | void key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum iaction cause,Boolean *skipped) |
src/lib3270/paste.c
| @@ -221,14 +221,29 @@ static int set_string(H3270 *hSession, const unsigned char *str) | @@ -221,14 +221,29 @@ static int set_string(H3270 *hSession, const unsigned char *str) | ||
| 221 | return data.qtd; | 221 | return data.qtd; |
| 222 | } | 222 | } |
| 223 | 223 | ||
| 224 | +/** | ||
| 225 | + * @brief Set string at defined position. | ||
| 226 | + * | ||
| 227 | + * @param hSession Session handle. | ||
| 228 | + * @param row Row for the first character. | ||
| 229 | + * @param col Col for the first character. | ||
| 230 | + * @param str String to set. | ||
| 231 | + * | ||
| 232 | + * @return -1 if error (sets errno) or number of processed characters. | ||
| 233 | + * | ||
| 234 | + */ | ||
| 224 | LIB3270_EXPORT int lib3270_set_string_at(H3270 *hSession, int row, int col, const unsigned char *str) | 235 | LIB3270_EXPORT int lib3270_set_string_at(H3270 *hSession, int row, int col, const unsigned char *str) |
| 225 | { | 236 | { |
| 226 | int rc = 0; | 237 | int rc = 0; |
| 227 | 238 | ||
| 228 | - CHECK_SESSION_HANDLE(hSession); | 239 | + FAIL_IF_NOT_ONLINE(hSession); |
| 229 | 240 | ||
| 241 | + // Is Keyboard locked ? | ||
| 230 | if(hSession->kybdlock) | 242 | if(hSession->kybdlock) |
| 231 | - return -EINVAL; | 243 | + { |
| 244 | + errno = EPERM; | ||
| 245 | + return -1; | ||
| 246 | + } | ||
| 232 | 247 | ||
| 233 | if(hSession->selected && !lib3270_get_toggle(hSession,LIB3270_TOGGLE_KEEP_SELECTED)) | 248 | if(hSession->selected && !lib3270_get_toggle(hSession,LIB3270_TOGGLE_KEEP_SELECTED)) |
| 234 | lib3270_unselect(hSession); | 249 | lib3270_unselect(hSession); |
| @@ -247,6 +262,7 @@ LIB3270_EXPORT int lib3270_set_string_at(H3270 *hSession, int row, int col, cons | @@ -247,6 +262,7 @@ LIB3270_EXPORT int lib3270_set_string_at(H3270 *hSession, int row, int col, cons | ||
| 247 | } | 262 | } |
| 248 | 263 | ||
| 249 | trace("%s rc=%d",__FUNCTION__,rc); | 264 | trace("%s rc=%d",__FUNCTION__,rc); |
| 265 | + | ||
| 250 | return rc; | 266 | return rc; |
| 251 | } | 267 | } |
| 252 | 268 |
src/lib3270/selection.c
| @@ -916,41 +916,54 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u | @@ -916,41 +916,54 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u | ||
| 916 | int maxlen = hSession->cols * hSession->rows; | 916 | int maxlen = hSession->cols * hSession->rows; |
| 917 | 917 | ||
| 918 | if(!lib3270_connected(hSession)) | 918 | if(!lib3270_connected(hSession)) |
| 919 | + { | ||
| 920 | + errno = ENOTCONN; | ||
| 919 | return -1; | 921 | return -1; |
| 922 | + } | ||
| 920 | 923 | ||
| 921 | switch(dir) | 924 | switch(dir) |
| 922 | { | 925 | { |
| 923 | case LIB3270_DIR_UP: | 926 | case LIB3270_DIR_UP: |
| 927 | + | ||
| 924 | if(sel && cursor_addr <= hSession->cols) | 928 | if(sel && cursor_addr <= hSession->cols) |
| 925 | - return EINVAL; | 929 | + return errno = EINVAL; |
| 930 | + | ||
| 926 | cursor_addr -= hSession->cols; | 931 | cursor_addr -= hSession->cols; |
| 927 | break; | 932 | break; |
| 928 | 933 | ||
| 929 | case LIB3270_DIR_DOWN: | 934 | case LIB3270_DIR_DOWN: |
| 935 | + | ||
| 930 | if(sel && cursor_addr >= (hSession->cols * (hSession->rows-1))) | 936 | if(sel && cursor_addr >= (hSession->cols * (hSession->rows-1))) |
| 931 | - return EINVAL; | 937 | + return errno = EINVAL; |
| 938 | + | ||
| 932 | cursor_addr += hSession->cols; | 939 | cursor_addr += hSession->cols; |
| 933 | break; | 940 | break; |
| 934 | 941 | ||
| 935 | case LIB3270_DIR_LEFT: | 942 | case LIB3270_DIR_LEFT: |
| 943 | + | ||
| 936 | if(sel && (cursor_addr % hSession->cols) < 1) | 944 | if(sel && (cursor_addr % hSession->cols) < 1) |
| 937 | - return EINVAL; | 945 | + return errno = EINVAL; |
| 946 | + | ||
| 938 | cursor_addr--; | 947 | cursor_addr--; |
| 939 | break; | 948 | break; |
| 940 | 949 | ||
| 941 | case LIB3270_DIR_RIGHT: | 950 | case LIB3270_DIR_RIGHT: |
| 951 | + | ||
| 942 | if(sel && (cursor_addr % hSession->cols) >= (hSession->cols-1)) | 952 | if(sel && (cursor_addr % hSession->cols) >= (hSession->cols-1)) |
| 943 | - return EINVAL; | 953 | + return errno = EINVAL; |
| 954 | + | ||
| 944 | cursor_addr++; | 955 | cursor_addr++; |
| 945 | break; | 956 | break; |
| 946 | 957 | ||
| 947 | case LIB3270_DIR_END: | 958 | case LIB3270_DIR_END: |
| 959 | + | ||
| 948 | cursor_addr = lib3270_get_field_end(hSession,cursor_addr); | 960 | cursor_addr = lib3270_get_field_end(hSession,cursor_addr); |
| 949 | if(cursor_addr == -1) | 961 | if(cursor_addr == -1) |
| 950 | - return EINVAL; | 962 | + return errno = EINVAL; |
| 951 | break; | 963 | break; |
| 952 | 964 | ||
| 953 | default: | 965 | default: |
| 966 | + errno = EINVAL; | ||
| 954 | return -1; | 967 | return -1; |
| 955 | } | 968 | } |
| 956 | 969 |