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