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 | 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 | 243 | virtual Session & push(int baddr, const std::string &text) = 0; |
| 238 | 244 | virtual Session & push(int row, int col, const std::string &text) = 0; |
| 239 | 245 | virtual Session & push(const PFKey key) = 0; |
| ... | ... | @@ -311,6 +317,16 @@ |
| 311 | 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 | 330 | // Set contents. |
| 315 | 331 | |
| 316 | 332 | /// @brief Set field at current posicion, jumps to next writable field. | ... | ... |
src/lib3270++/local/session.cc
| ... | ... | @@ -219,10 +219,14 @@ |
| 219 | 219 | |
| 220 | 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 | 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 | 232 | text.assign(convertFromHost(contents).c_str()); |
| ... | ... | @@ -240,15 +244,19 @@ |
| 240 | 244 | |
| 241 | 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 | 251 | int baddr = lib3270_get_cursor_address(hSession); |
| 244 | 252 | if(baddr < 0) { |
| 245 | 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 | 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 | 262 | text.assign(convertFromHost(contents).c_str()); |
| ... | ... | @@ -265,6 +273,33 @@ |
| 265 | 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 | 156 | |
| 157 | 157 | ConnectionState getConnectionState() const override; |
| 158 | 158 | |
| 159 | + void setCursorPosition(unsigned short addr); | |
| 160 | + void setCursorPosition(unsigned short row, unsigned short col); | |
| 161 | + | |
| 159 | 162 | /// @brief Set field at current posicion, jumps to next writable field. |
| 160 | 163 | TN3270::Session & push(const char *text) override; |
| 161 | 164 | ... | ... |