Commit d021aee617ab89dc04ebfacbdf6c387d845c142d

Authored by Perry Werneck
1 parent aee80d5f

Updating API definitions.

@@ -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