Commit 538f302a570f923eb215a1bb736c2efcf3ff410c

Authored by Perry Werneck
1 parent 7b519ee8

Working on new API.

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