Commit d021aee617ab89dc04ebfacbdf6c387d845c142d

Authored by Perry Werneck
1 parent aee80d5f

Updating API definitions.

lib3270.cbp
... ... @@ -108,6 +108,15 @@
108 108 <Unit filename="src/include/winversc.h" />
109 109 <Unit filename="src/include/xioc.h" />
110 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 120 <Unit filename="src/lib3270/actions.c">
112 121 <Option compilerVar="CC" />
113 122 </Unit>
... ...
src/include/lib3270++.h
... ... @@ -297,8 +297,8 @@
297 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 304 inline operator ProgramMessage() const {
... ... @@ -309,9 +309,8 @@
309 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 315 inline operator ConnectionState() const {
317 316 return getConnectionState();
... ...
src/include/lib3270.h
... ... @@ -615,7 +615,20 @@
615 615 LIB3270_EXPORT int lib3270_set_string(H3270 *h, const unsigned char *str);
616 616  
617 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 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 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 103 std::string Host::toString() const {
94 104  
95 105 this->session->waitForReady(this->timeout);
... ...
src/lib3270++/local/session.cc
... ... @@ -268,7 +268,9 @@
268 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 275 return *this;
274 276 }
... ... @@ -278,12 +280,10 @@
278 280 /// @param addr Cursor address.
279 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 289 /// @brief Set cursor position.
... ... @@ -292,11 +292,10 @@
292 292 /// @param col New cursor column.
293 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 974  
975 975 LIB3270_EXPORT int lib3270_input_string(H3270 *hSession, const unsigned char *str)
976 976 {
  977 + FAIL_IF_NOT_ONLINE(hSession);
  978 +
977 979 while(*str)
978 980 {
979 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 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 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 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 235 LIB3270_EXPORT int lib3270_set_string_at(H3270 *hSession, int row, int col, const unsigned char *str)
225 236 {
226 237 int rc = 0;
227 238  
228   - CHECK_SESSION_HANDLE(hSession);
  239 + FAIL_IF_NOT_ONLINE(hSession);
229 240  
  241 + // Is Keyboard locked ?
230 242 if(hSession->kybdlock)
231   - return -EINVAL;
  243 + {
  244 + errno = EPERM;
  245 + return -1;
  246 + }
232 247  
233 248 if(hSession->selected && !lib3270_get_toggle(hSession,LIB3270_TOGGLE_KEEP_SELECTED))
234 249 lib3270_unselect(hSession);
... ... @@ -247,6 +262,7 @@ LIB3270_EXPORT int lib3270_set_string_at(H3270 *hSession, int row, int col, cons
247 262 }
248 263  
249 264 trace("%s rc=%d",__FUNCTION__,rc);
  265 +
250 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 916 int maxlen = hSession->cols * hSession->rows;
917 917  
918 918 if(!lib3270_connected(hSession))
  919 + {
  920 + errno = ENOTCONN;
919 921 return -1;
  922 + }
920 923  
921 924 switch(dir)
922 925 {
923 926 case LIB3270_DIR_UP:
  927 +
924 928 if(sel && cursor_addr <= hSession->cols)
925   - return EINVAL;
  929 + return errno = EINVAL;
  930 +
926 931 cursor_addr -= hSession->cols;
927 932 break;
928 933  
929 934 case LIB3270_DIR_DOWN:
  935 +
930 936 if(sel && cursor_addr >= (hSession->cols * (hSession->rows-1)))
931   - return EINVAL;
  937 + return errno = EINVAL;
  938 +
932 939 cursor_addr += hSession->cols;
933 940 break;
934 941  
935 942 case LIB3270_DIR_LEFT:
  943 +
936 944 if(sel && (cursor_addr % hSession->cols) < 1)
937   - return EINVAL;
  945 + return errno = EINVAL;
  946 +
938 947 cursor_addr--;
939 948 break;
940 949  
941 950 case LIB3270_DIR_RIGHT:
  951 +
942 952 if(sel && (cursor_addr % hSession->cols) >= (hSession->cols-1))
943   - return EINVAL;
  953 + return errno = EINVAL;
  954 +
944 955 cursor_addr++;
945 956 break;
946 957  
947 958 case LIB3270_DIR_END:
  959 +
948 960 cursor_addr = lib3270_get_field_end(hSession,cursor_addr);
949 961 if(cursor_addr == -1)
950   - return EINVAL;
  962 + return errno = EINVAL;
951 963 break;
952 964  
953 965 default:
  966 + errno = EINVAL;
954 967 return -1;
955 968 }
956 969  
... ...