Commit 538f302a570f923eb215a1bb736c2efcf3ff410c
1 parent
7b519ee8
Exists in
master
and in
3 other branches
Working on new API.
Showing
2 changed files
with
72 additions
and
60 deletions
Show diff stats
src/include/lib3270.h
| @@ -67,7 +67,7 @@ | @@ -67,7 +67,7 @@ | ||
| 67 | #define LIB3270_BIND_PLU_NAME_MAX 8 | 67 | #define LIB3270_BIND_PLU_NAME_MAX 8 |
| 68 | 68 | ||
| 69 | /** | 69 | /** |
| 70 | - * Maximum size for LUNAME | 70 | + * @brief Maximum size for LUNAME |
| 71 | * | 71 | * |
| 72 | */ | 72 | */ |
| 73 | #define LIB3270_LUNAME_LENGTH 16 | 73 | #define LIB3270_LUNAME_LENGTH 16 |
| @@ -171,17 +171,17 @@ | @@ -171,17 +171,17 @@ | ||
| 171 | 171 | ||
| 172 | 172 | ||
| 173 | /** | 173 | /** |
| 174 | - * OIA Status indicators. | 174 | + * @brief OIA Status indicators. |
| 175 | * | 175 | * |
| 176 | */ | 176 | */ |
| 177 | typedef enum _lib3270_flag | 177 | typedef enum _lib3270_flag |
| 178 | { | 178 | { |
| 179 | - LIB3270_FLAG_BOXSOLID, /**< System available */ | ||
| 180 | - LIB3270_FLAG_UNDERA, /**< Control Unit STATUS */ | 179 | + LIB3270_FLAG_BOXSOLID, /**< @brief System available */ |
| 180 | + LIB3270_FLAG_UNDERA, /**< @brief Control Unit STATUS */ | ||
| 181 | LIB3270_FLAG_TYPEAHEAD, | 181 | LIB3270_FLAG_TYPEAHEAD, |
| 182 | - LIB3270_FLAG_PRINTER, /**< Printer session status */ | 182 | + LIB3270_FLAG_PRINTER, /**< @brief Printer session status */ |
| 183 | LIB3270_FLAG_REVERSE, | 183 | LIB3270_FLAG_REVERSE, |
| 184 | - LIB3270_FLAG_SCRIPT, /**< Script status */ | 184 | + LIB3270_FLAG_SCRIPT, /**< @brief Script status */ |
| 185 | 185 | ||
| 186 | LIB3270_FLAG_COUNT | 186 | LIB3270_FLAG_COUNT |
| 187 | 187 | ||
| @@ -217,7 +217,7 @@ | @@ -217,7 +217,7 @@ | ||
| 217 | 217 | ||
| 218 | 218 | ||
| 219 | /** | 219 | /** |
| 220 | - * Pointer modes. | 220 | + * @brief Pointer modes. |
| 221 | * | 221 | * |
| 222 | * Pointer modes set by library; an application can use it | 222 | * Pointer modes set by library; an application can use it |
| 223 | * as a hint to change the mouse pointer based on connection status. | 223 | * as a hint to change the mouse pointer based on connection status. |
| @@ -225,9 +225,9 @@ | @@ -225,9 +225,9 @@ | ||
| 225 | */ | 225 | */ |
| 226 | typedef enum _LIB3270_POINTER | 226 | typedef enum _LIB3270_POINTER |
| 227 | { | 227 | { |
| 228 | - LIB3270_POINTER_UNLOCKED, /**< Ready for user actions */ | ||
| 229 | - LIB3270_POINTER_WAITING, /**< Waiting for host */ | ||
| 230 | - LIB3270_POINTER_LOCKED, /**< Locked, can't receive user actions */ | 228 | + LIB3270_POINTER_UNLOCKED, /**< @brief Ready for user actions */ |
| 229 | + LIB3270_POINTER_WAITING, /**< @brief Waiting for host */ | ||
| 230 | + LIB3270_POINTER_LOCKED, /**< @brief Locked, can't receive user actions */ | ||
| 231 | 231 | ||
| 232 | LIB3270_POINTER_PROTECTED, | 232 | LIB3270_POINTER_PROTECTED, |
| 233 | LIB3270_POINTER_MOVE_SELECTION, | 233 | LIB3270_POINTER_MOVE_SELECTION, |
| @@ -247,20 +247,20 @@ | @@ -247,20 +247,20 @@ | ||
| 247 | 247 | ||
| 248 | 248 | ||
| 249 | /** | 249 | /** |
| 250 | - * connection state | 250 | + * @brief Connection state |
| 251 | */ | 251 | */ |
| 252 | typedef enum lib3270_cstate | 252 | typedef enum lib3270_cstate |
| 253 | { | 253 | { |
| 254 | - LIB3270_NOT_CONNECTED, /**< no socket, disconnected */ | ||
| 255 | - LIB3270_RESOLVING, /**< resolving hostname */ | ||
| 256 | - LIB3270_PENDING, /**< connection pending */ | ||
| 257 | - LIB3270_CONNECTED_INITIAL, /**< connected, no mode yet */ | ||
| 258 | - LIB3270_CONNECTED_ANSI, /**< connected in NVT ANSI mode */ | ||
| 259 | - LIB3270_CONNECTED_3270, /**< connected in old-style 3270 mode */ | ||
| 260 | - LIB3270_CONNECTED_INITIAL_E, /**< connected in TN3270E mode, unnegotiated */ | ||
| 261 | - LIB3270_CONNECTED_NVT, /**< connected in TN3270E mode, NVT mode */ | ||
| 262 | - LIB3270_CONNECTED_SSCP, /**< connected in TN3270E mode, SSCP-LU mode */ | ||
| 263 | - LIB3270_CONNECTED_TN3270E /**< connected in TN3270E mode, 3270 mode */ | 254 | + LIB3270_NOT_CONNECTED, /**< @brief no socket, disconnected */ |
| 255 | + LIB3270_RESOLVING, /**< @brief resolving hostname */ | ||
| 256 | + LIB3270_PENDING, /**< @brief connection pending */ | ||
| 257 | + LIB3270_CONNECTED_INITIAL, /**< @brief connected, no mode yet */ | ||
| 258 | + LIB3270_CONNECTED_ANSI, /**< @brief connected in NVT ANSI mode */ | ||
| 259 | + LIB3270_CONNECTED_3270, /**< @brief connected in old-style 3270 mode */ | ||
| 260 | + LIB3270_CONNECTED_INITIAL_E, /**< @brief connected in TN3270E mode, unnegotiated */ | ||
| 261 | + LIB3270_CONNECTED_NVT, /**< @brief connected in TN3270E mode, NVT mode */ | ||
| 262 | + LIB3270_CONNECTED_SSCP, /**< @brief connected in TN3270E mode, SSCP-LU mode */ | ||
| 263 | + LIB3270_CONNECTED_TN3270E /**< @brief connected in TN3270E mode, 3270 mode */ | ||
| 264 | } LIB3270_CSTATE; | 264 | } LIB3270_CSTATE; |
| 265 | 265 | ||
| 266 | 266 | ||
| @@ -585,15 +585,16 @@ | @@ -585,15 +585,16 @@ | ||
| 585 | LIB3270_EXPORT int lib3270_input_string(H3270 *hSession, const unsigned char *str); | 585 | LIB3270_EXPORT int lib3270_input_string(H3270 *hSession, const unsigned char *str); |
| 586 | 586 | ||
| 587 | /** | 587 | /** |
| 588 | - * Set cursor address. | 588 | + * @brief Move cursor to a new position. |
| 589 | * | 589 | * |
| 590 | - * @param h Session handle. | ||
| 591 | - * @param baddr New cursor address. | 590 | + * @see lib3270_set_cursor_position |
| 592 | * | 591 | * |
| 593 | - * @return or -1 if invalid (sets errno). | 592 | + * @param hSession TN3270 session. |
| 593 | + * @param baddr New cursor position. | ||
| 594 | * | 594 | * |
| 595 | + * @return Old cursor address or -1 in case of error (sets errno). | ||
| 595 | */ | 596 | */ |
| 596 | - LIB3270_EXPORT int lib3270_set_cursor_address(H3270 *h, int baddr); | 597 | + LIB3270_EXPORT int lib3270_set_cursor_address(H3270 *hSession, int baddr); |
| 597 | 598 | ||
| 598 | /** | 599 | /** |
| 599 | * Set cursor position. | 600 | * Set cursor position. |
| @@ -602,7 +603,7 @@ | @@ -602,7 +603,7 @@ | ||
| 602 | * @param row New cursor row. | 603 | * @param row New cursor row. |
| 603 | * @param col New cursor col. | 604 | * @param col New cursor col. |
| 604 | * | 605 | * |
| 605 | - * @return last cursor address or -1 if invalid (sets errno).. | 606 | + * @return last cursor address or -1 if invalid (sets errno). |
| 606 | * | 607 | * |
| 607 | */ | 608 | */ |
| 608 | LIB3270_EXPORT int lib3270_set_cursor_position(H3270 *h, int row, int col); | 609 | LIB3270_EXPORT int lib3270_set_cursor_position(H3270 *h, int row, int col); |
| @@ -610,12 +611,12 @@ | @@ -610,12 +611,12 @@ | ||
| 610 | /** | 611 | /** |
| 611 | * get cursor address. | 612 | * get cursor address. |
| 612 | * | 613 | * |
| 613 | - * @param h Session handle. | 614 | + * @param hSession Session handle. |
| 614 | * | 615 | * |
| 615 | - * @return Cursor address. | 616 | + * @return Cursor address or -1 if invalid (sets errno). |
| 616 | * | 617 | * |
| 617 | */ | 618 | */ |
| 618 | - LIB3270_EXPORT int lib3270_get_cursor_address(H3270 *h); | 619 | + LIB3270_EXPORT int lib3270_get_cursor_address(H3270 *hSession); |
| 619 | 620 | ||
| 620 | 621 | ||
| 621 | /** | 622 | /** |
| @@ -737,7 +738,8 @@ | @@ -737,7 +738,8 @@ | ||
| 737 | LIB3270_EXPORT void lib3270_remove_poll_fd(H3270 *session, int fd); | 738 | LIB3270_EXPORT void lib3270_remove_poll_fd(H3270 *session, int fd); |
| 738 | LIB3270_EXPORT void lib3270_update_poll_fd(H3270 *session, int fd, LIB3270_IO_FLAG flag); | 739 | LIB3270_EXPORT void lib3270_update_poll_fd(H3270 *session, int fd, LIB3270_IO_FLAG flag); |
| 739 | 740 | ||
| 740 | - /** Callback table | 741 | + /** |
| 742 | + * @brief Callback table | ||
| 741 | * | 743 | * |
| 742 | * Structure with GUI unblocking I/O calls, used to replace the lib3270´s internal ones. | 744 | * Structure with GUI unblocking I/O calls, used to replace the lib3270´s internal ones. |
| 743 | * | 745 | * |
| @@ -827,21 +829,6 @@ | @@ -827,21 +829,6 @@ | ||
| 827 | LIB3270_EXPORT LIB3270_SSL_STATE lib3270_get_secure(H3270 *session); | 829 | LIB3270_EXPORT LIB3270_SSL_STATE lib3270_get_secure(H3270 *session); |
| 828 | LIB3270_EXPORT long lib3270_get_SSL_verify_result(H3270 *session); | 830 | LIB3270_EXPORT long lib3270_get_SSL_verify_result(H3270 *session); |
| 829 | 831 | ||
| 830 | - | ||
| 831 | - /** | ||
| 832 | - * Call non gui function. | ||
| 833 | - * | ||
| 834 | - * Call informed function in a separate thread, keep gui main loop running until | ||
| 835 | - * the function returns. | ||
| 836 | - * | ||
| 837 | - * @param callback Function to call. | ||
| 838 | - * @param h Related session (for timer indicator) | ||
| 839 | - * @param parm Parameter to be passed to the function. | ||
| 840 | - * | ||
| 841 | - */ | ||
| 842 | -// LIB3270_EXPORT int lib3270_call_thread(int(*callback)(H3270 *h, void *), H3270 *h, void *parm); | ||
| 843 | - | ||
| 844 | - | ||
| 845 | /** | 832 | /** |
| 846 | * Run main iteration. | 833 | * Run main iteration. |
| 847 | * | 834 | * |
| @@ -923,7 +910,7 @@ | @@ -923,7 +910,7 @@ | ||
| 923 | LIB3270_EXPORT int lib3270_has_selection(H3270 *hSession); | 910 | LIB3270_EXPORT int lib3270_has_selection(H3270 *hSession); |
| 924 | 911 | ||
| 925 | /** | 912 | /** |
| 926 | - * Get all text inside the terminal. | 913 | + * @brief Get all text inside the terminal. |
| 927 | * | 914 | * |
| 928 | * @param h Session Handle. | 915 | * @param h Session Handle. |
| 929 | * @param offset Start position. | 916 | * @param offset Start position. |
| @@ -936,7 +923,7 @@ | @@ -936,7 +923,7 @@ | ||
| 936 | LIB3270_EXPORT char * lib3270_get_text(H3270 *h, int offset, int len, char lf); | 923 | LIB3270_EXPORT char * lib3270_get_text(H3270 *h, int offset, int len, char lf); |
| 937 | 924 | ||
| 938 | /** | 925 | /** |
| 939 | - * Get text at requested position | 926 | + * @brief Get text at requested position |
| 940 | * | 927 | * |
| 941 | * @param h Session Handle. | 928 | * @param h Session Handle. |
| 942 | * @param row Desired row. | 929 | * @param row Desired row. |
| @@ -950,7 +937,7 @@ | @@ -950,7 +937,7 @@ | ||
| 950 | LIB3270_EXPORT char * lib3270_get_text_at(H3270 *h, int row, int col, int len, char lf); | 937 | LIB3270_EXPORT char * lib3270_get_text_at(H3270 *h, int row, int col, int len, char lf); |
| 951 | 938 | ||
| 952 | /** | 939 | /** |
| 953 | - * Check for text at requested position | 940 | + * @brief Check for text at requested position |
| 954 | * | 941 | * |
| 955 | * @param h Session Handle. | 942 | * @param h Session Handle. |
| 956 | * @param row Desired row. | 943 | * @param row Desired row. |
| @@ -965,7 +952,7 @@ | @@ -965,7 +952,7 @@ | ||
| 965 | 952 | ||
| 966 | 953 | ||
| 967 | /** | 954 | /** |
| 968 | - * Get contents of the field at position. | 955 | + * @brief Get contents of the field at position. |
| 969 | * | 956 | * |
| 970 | * @param h Session Handle. | 957 | * @param h Session Handle. |
| 971 | * @param baddr Reference position. | 958 | * @param baddr Reference position. |
| @@ -976,7 +963,7 @@ | @@ -976,7 +963,7 @@ | ||
| 976 | LIB3270_EXPORT char * lib3270_get_field_at(H3270 *h, int baddr); | 963 | LIB3270_EXPORT char * lib3270_get_field_at(H3270 *h, int baddr); |
| 977 | 964 | ||
| 978 | /** | 965 | /** |
| 979 | - * Find the next unprotected field. | 966 | + * @brief Find the next unprotected field. |
| 980 | * | 967 | * |
| 981 | * @param hSession Session handle. | 968 | * @param hSession Session handle. |
| 982 | * @param baddr0 Search start addr (-1 to use current cursor position). | 969 | * @param baddr0 Search start addr (-1 to use current cursor position). |
| @@ -993,7 +980,7 @@ | @@ -993,7 +980,7 @@ | ||
| 993 | LIB3270_EXPORT int lib3270_get_is_protected(H3270 *hSession, int baddr0); | 980 | LIB3270_EXPORT int lib3270_get_is_protected(H3270 *hSession, int baddr0); |
| 994 | 981 | ||
| 995 | /** | 982 | /** |
| 996 | - * Get Check if the screen position is protected. | 983 | + * @brief Get Check if the screen position is protected. |
| 997 | * | 984 | * |
| 998 | * @param h Session Handle. | 985 | * @param h Session Handle. |
| 999 | * @param row Desired row. | 986 | * @param row Desired row. |
| @@ -1003,7 +990,7 @@ | @@ -1003,7 +990,7 @@ | ||
| 1003 | LIB3270_EXPORT int lib3270_get_is_protected_at(H3270 *h, int row, int col); | 990 | LIB3270_EXPORT int lib3270_get_is_protected_at(H3270 *h, int row, int col); |
| 1004 | 991 | ||
| 1005 | /** | 992 | /** |
| 1006 | - * Get address of the first blank. | 993 | + * @brief Get address of the first blank. |
| 1007 | * | 994 | * |
| 1008 | * Get address of the first blank after the last nonblank in the | 995 | * Get address of the first blank after the last nonblank in the |
| 1009 | * field, or if the field is full, to the last character in the field. | 996 | * field, or if the field is full, to the last character in the field. |
| @@ -1016,7 +1003,7 @@ | @@ -1016,7 +1003,7 @@ | ||
| 1016 | LIB3270_EXPORT int lib3270_get_field_end(H3270 *hSession, int baddr); | 1003 | LIB3270_EXPORT int lib3270_get_field_end(H3270 *hSession, int baddr); |
| 1017 | 1004 | ||
| 1018 | /** | 1005 | /** |
| 1019 | - * Find the buffer address of the field attribute for a given buffer address. | 1006 | + * @brief Find the buffer address of the field attribute for a given buffer address. |
| 1020 | * | 1007 | * |
| 1021 | * @param h Session handle. | 1008 | * @param h Session handle. |
| 1022 | * @param addr Buffer address of the field. | 1009 | * @param addr Buffer address of the field. |
| @@ -1029,7 +1016,7 @@ | @@ -1029,7 +1016,7 @@ | ||
| 1029 | LIB3270_EXPORT int lib3270_field_attribute(H3270 *hSession, int baddr); | 1016 | LIB3270_EXPORT int lib3270_field_attribute(H3270 *hSession, int baddr); |
| 1030 | 1017 | ||
| 1031 | /** | 1018 | /** |
| 1032 | - * Get the length of the field at given buffer address. | 1019 | + * @brief Get the length of the field at given buffer address. |
| 1033 | * | 1020 | * |
| 1034 | * @param h Session handle. | 1021 | * @param h Session handle. |
| 1035 | * @param addr Buffer address of the field. | 1022 | * @param addr Buffer address of the field. |
| @@ -1041,7 +1028,7 @@ | @@ -1041,7 +1028,7 @@ | ||
| 1041 | 1028 | ||
| 1042 | 1029 | ||
| 1043 | /** | 1030 | /** |
| 1044 | - * Get a terminal character and attribute. | 1031 | + * @brief Get a terminal character and attribute. |
| 1045 | * | 1032 | * |
| 1046 | * @param h Session Handle. | 1033 | * @param h Session Handle. |
| 1047 | * @param baddr Element address ((element_row*cols)+element_col) | 1034 | * @param baddr Element address ((element_row*cols)+element_col) |
| @@ -1083,6 +1070,8 @@ | @@ -1083,6 +1070,8 @@ | ||
| 1083 | 1070 | ||
| 1084 | /** | 1071 | /** |
| 1085 | * | 1072 | * |
| 1073 | + * @brief Overrides the default value for the unlock delay. | ||
| 1074 | + * | ||
| 1086 | * Overrides the default value for the unlock delay (the delay between the host unlocking the | 1075 | * Overrides the default value for the unlock delay (the delay between the host unlocking the |
| 1087 | * keyboard and lib3270 actually performing the unlock). | 1076 | * keyboard and lib3270 actually performing the unlock). |
| 1088 | * The value is in milliseconds; use 0 to turn off the delay completely. | 1077 | * The value is in milliseconds; use 0 to turn off the delay completely. |
| @@ -1095,7 +1084,7 @@ | @@ -1095,7 +1084,7 @@ | ||
| 1095 | 1084 | ||
| 1096 | 1085 | ||
| 1097 | /** | 1086 | /** |
| 1098 | - * Alloc/Realloc memory buffer. | 1087 | + * @brief Alloc/Realloc memory buffer. |
| 1099 | * | 1088 | * |
| 1100 | * Allocate/reallocate an array. | 1089 | * Allocate/reallocate an array. |
| 1101 | * | 1090 | * |
| @@ -1114,7 +1103,7 @@ | @@ -1114,7 +1103,7 @@ | ||
| 1114 | LIB3270_EXPORT void * lib3270_strdup(const char *str); | 1103 | LIB3270_EXPORT void * lib3270_strdup(const char *str); |
| 1115 | 1104 | ||
| 1116 | /** | 1105 | /** |
| 1117 | - * Release allocated memory. | 1106 | + * @brief Release allocated memory. |
| 1118 | * | 1107 | * |
| 1119 | * @param p Memory block to release (can be NULL) | 1108 | * @param p Memory block to release (can be NULL) |
| 1120 | * | 1109 | * |
src/lib3270++/local/session.cc
| @@ -233,12 +233,35 @@ | @@ -233,12 +233,35 @@ | ||
| 233 | } | 233 | } |
| 234 | 234 | ||
| 235 | TN3270::Session & Local::Session::pop(int row, int col, std::string &text) { | 235 | TN3270::Session & Local::Session::pop(int row, int col, std::string &text) { |
| 236 | - std::lock_guard<std::mutex> lock(sync); | ||
| 237 | - return *this; | 236 | + return this->pop(lib3270_translate_to_address(hSession,row,col),text); |
| 238 | } | 237 | } |
| 239 | 238 | ||
| 240 | TN3270::Session & Local::Session::pop(std::string &text) { | 239 | TN3270::Session & Local::Session::pop(std::string &text) { |
| 240 | + | ||
| 241 | std::lock_guard<std::mutex> lock(sync); | 241 | std::lock_guard<std::mutex> lock(sync); |
| 242 | + | ||
| 243 | + int baddr = lib3270_get_cursor_address(hSession); | ||
| 244 | + if(baddr < 0) { | ||
| 245 | + throw std::system_error(errno, std::system_category()); | ||
| 246 | + } | ||
| 247 | + | ||
| 248 | + char *contents = lib3270_get_field_at(hSession, baddr); | ||
| 249 | + | ||
| 250 | + if(!contents) { | ||
| 251 | + throw std::runtime_error("Can't get field contents"); | ||
| 252 | + } | ||
| 253 | + | ||
| 254 | + text.assign(convertFromHost(contents).c_str()); | ||
| 255 | + | ||
| 256 | + lib3270_free(contents); | ||
| 257 | + | ||
| 258 | + baddr = lib3270_get_next_unprotected(hSession,baddr); | ||
| 259 | + if(!baddr) { | ||
| 260 | + baddr = lib3270_get_next_unprotected(hSession,0); | ||
| 261 | + } | ||
| 262 | + | ||
| 263 | + lib3270_set_cursor_address(hSession,baddr); | ||
| 264 | + | ||
| 242 | return *this; | 265 | return *this; |
| 243 | } | 266 | } |
| 244 | 267 |