Commit 5e086dbaf749ce0140e4e036344657acf3e38380
1 parent
9b29e43a
Exists in
master
and in
3 other branches
Updating C++ API.
Showing
3 changed files
with
58 additions
and
4 deletions
Show diff stats
src/include/lib3270++.h
| @@ -234,6 +234,12 @@ | @@ -234,6 +234,12 @@ | ||
| 234 | return push(text.c_str()); | 234 | return push(text.c_str()); |
| 235 | } | 235 | } |
| 236 | 236 | ||
| 237 | + /// @brief Set cursor address. | ||
| 238 | + virtual void setCursorPosition(unsigned short addr) = 0; | ||
| 239 | + | ||
| 240 | + /// @brief Set cursor position. | ||
| 241 | + virtual void setCursorPosition(unsigned short row, unsigned short col) = 0; | ||
| 242 | + | ||
| 237 | virtual Session & push(int baddr, const std::string &text) = 0; | 243 | virtual Session & push(int baddr, const std::string &text) = 0; |
| 238 | virtual Session & push(int row, int col, const std::string &text) = 0; | 244 | virtual Session & push(int row, int col, const std::string &text) = 0; |
| 239 | virtual Session & push(const PFKey key) = 0; | 245 | virtual Session & push(const PFKey key) = 0; |
| @@ -311,6 +317,16 @@ | @@ -311,6 +317,16 @@ | ||
| 311 | return getConnectionState(); | 317 | return getConnectionState(); |
| 312 | } | 318 | } |
| 313 | 319 | ||
| 320 | + /// @brief Set cursor address. | ||
| 321 | + inline void setCursorPosition(unsigned short addr) { | ||
| 322 | + session->setCursorPosition(addr); | ||
| 323 | + } | ||
| 324 | + | ||
| 325 | + /// @brief Set cursor position. | ||
| 326 | + inline void setCursorPosition(unsigned short row, unsigned short col) { | ||
| 327 | + session->setCursorPosition(row,col); | ||
| 328 | + } | ||
| 329 | + | ||
| 314 | // Set contents. | 330 | // Set contents. |
| 315 | 331 | ||
| 316 | /// @brief Set field at current posicion, jumps to next writable field. | 332 | /// @brief Set field at current posicion, jumps to next writable field. |
src/lib3270++/local/session.cc
| @@ -219,10 +219,14 @@ | @@ -219,10 +219,14 @@ | ||
| 219 | 219 | ||
| 220 | std::lock_guard<std::mutex> lock(sync); | 220 | std::lock_guard<std::mutex> lock(sync); |
| 221 | 221 | ||
| 222 | - char *contents = lib3270_get_field_at(hSession, baddr); | 222 | + if(!lib3270_is_connected(hSession)) { |
| 223 | + throw std::system_error(ENOTCONN, std::system_category()); | ||
| 224 | + } | ||
| 225 | + | ||
| 226 | + char *contents = lib3270_get_field_text_at(hSession, baddr); | ||
| 223 | 227 | ||
| 224 | if(!contents) { | 228 | if(!contents) { |
| 225 | - throw std::runtime_error("Can't get field contents"); | 229 | + throw std::system_error(errno, std::system_category()); |
| 226 | } | 230 | } |
| 227 | 231 | ||
| 228 | text.assign(convertFromHost(contents).c_str()); | 232 | text.assign(convertFromHost(contents).c_str()); |
| @@ -240,15 +244,19 @@ | @@ -240,15 +244,19 @@ | ||
| 240 | 244 | ||
| 241 | std::lock_guard<std::mutex> lock(sync); | 245 | std::lock_guard<std::mutex> lock(sync); |
| 242 | 246 | ||
| 247 | + if(!lib3270_is_connected(hSession)) { | ||
| 248 | + throw std::system_error(ENOTCONN, std::system_category()); | ||
| 249 | + } | ||
| 250 | + | ||
| 243 | int baddr = lib3270_get_cursor_address(hSession); | 251 | int baddr = lib3270_get_cursor_address(hSession); |
| 244 | if(baddr < 0) { | 252 | if(baddr < 0) { |
| 245 | throw std::system_error(errno, std::system_category()); | 253 | throw std::system_error(errno, std::system_category()); |
| 246 | } | 254 | } |
| 247 | 255 | ||
| 248 | - char *contents = lib3270_get_field_at(hSession, baddr); | 256 | + char *contents = lib3270_get_field_text_at(hSession, baddr); |
| 249 | 257 | ||
| 250 | if(!contents) { | 258 | if(!contents) { |
| 251 | - throw std::runtime_error("Can't get field contents"); | 259 | + throw std::system_error(errno, std::system_category()); |
| 252 | } | 260 | } |
| 253 | 261 | ||
| 254 | text.assign(convertFromHost(contents).c_str()); | 262 | text.assign(convertFromHost(contents).c_str()); |
| @@ -265,6 +273,33 @@ | @@ -265,6 +273,33 @@ | ||
| 265 | return *this; | 273 | return *this; |
| 266 | } | 274 | } |
| 267 | 275 | ||
| 276 | + /// @brief Set cursor address. | ||
| 277 | + /// | ||
| 278 | + /// @param addr Cursor address. | ||
| 279 | + void Local::Session::setCursorPosition(unsigned short addr) { | ||
| 280 | + | ||
| 281 | + if(!lib3270_is_connected(hSession)) { | ||
| 282 | + throw std::system_error(ENOTCONN, std::system_category()); | ||
| 283 | + } | ||
| 284 | + | ||
| 285 | + lib3270_set_cursor_address(hSession,baddr); | ||
| 286 | + | ||
| 287 | + } | ||
| 288 | + | ||
| 289 | + /// @brief Set cursor position. | ||
| 290 | + /// | ||
| 291 | + /// @param row New cursor row. | ||
| 292 | + /// @param col New cursor column. | ||
| 293 | + void Local::Session::setCursorPosition(unsigned short row, unsigned short col) { | ||
| 294 | + | ||
| 295 | + if(!lib3270_is_connected(hSession)) { | ||
| 296 | + throw std::system_error(ENOTCONN, std::system_category()); | ||
| 297 | + } | ||
| 298 | + | ||
| 299 | + lib3270_set_cursor_position(hSession,row,col); | ||
| 300 | + } | ||
| 301 | + | ||
| 302 | + | ||
| 268 | } | 303 | } |
| 269 | 304 | ||
| 270 | 305 |
src/lib3270++/private.h
| @@ -156,6 +156,9 @@ | @@ -156,6 +156,9 @@ | ||
| 156 | 156 | ||
| 157 | ConnectionState getConnectionState() const override; | 157 | ConnectionState getConnectionState() const override; |
| 158 | 158 | ||
| 159 | + void setCursorPosition(unsigned short addr); | ||
| 160 | + void setCursorPosition(unsigned short row, unsigned short col); | ||
| 161 | + | ||
| 159 | /// @brief Set field at current posicion, jumps to next writable field. | 162 | /// @brief Set field at current posicion, jumps to next writable field. |
| 160 | TN3270::Session & push(const char *text) override; | 163 | TN3270::Session & push(const char *text) override; |
| 161 | 164 |