Commit a63e0cc539aa2439bb6ee2bce0961aeba37c839e
1 parent
6a81f385
Exists in
master
and in
2 other branches
Adding method to get translated cursor position.
Showing
2 changed files
with
36 additions
and
0 deletions
Show diff stats
src/core/screen.c
| @@ -422,6 +422,27 @@ LIB3270_EXPORT int lib3270_get_cursor_address(const H3270 *hSession) | @@ -422,6 +422,27 @@ LIB3270_EXPORT int lib3270_get_cursor_address(const H3270 *hSession) | ||
| 422 | return state ? -state : hSession->cursor_addr; | 422 | return state ? -state : hSession->cursor_addr; |
| 423 | } | 423 | } |
| 424 | 424 | ||
| 425 | +LIB3270_EXPORT int lib3270_get_cursor_position(const H3270 *hSession, unsigned short *row, unsigned short *col) | ||
| 426 | +{ | ||
| 427 | + int state = check_online_session(hSession); | ||
| 428 | + if(state) | ||
| 429 | + { | ||
| 430 | + *row = *col = 9; | ||
| 431 | + return state; | ||
| 432 | + } | ||
| 433 | + | ||
| 434 | + unsigned short addr = (unsigned short) hSession->cursor_addr; | ||
| 435 | + | ||
| 436 | + if(row) | ||
| 437 | + *row = (addr / ((unsigned short) hSession->view.cols))+1; | ||
| 438 | + | ||
| 439 | + if(col) | ||
| 440 | + *col = (addr % ((unsigned short) hSession->view.cols))+1; | ||
| 441 | + | ||
| 442 | + return 0; | ||
| 443 | +} | ||
| 444 | + | ||
| 445 | + | ||
| 425 | /** | 446 | /** |
| 426 | * @brief Converts row/col in a buffer address. | 447 | * @brief Converts row/col in a buffer address. |
| 427 | * | 448 | * |
src/include/lib3270.h
| @@ -767,6 +767,21 @@ | @@ -767,6 +767,21 @@ | ||
| 767 | LIB3270_EXPORT int lib3270_get_cursor_address(const H3270 *hSession); | 767 | LIB3270_EXPORT int lib3270_get_cursor_address(const H3270 *hSession); |
| 768 | 768 | ||
| 769 | /** | 769 | /** |
| 770 | + * @brief Get row/col of the current cursor position. | ||
| 771 | + * | ||
| 772 | + * @param hSession Session handler. | ||
| 773 | + * @param row Pointer for current cursor row. | ||
| 774 | + * @param col Pointer for current cursor column. | ||
| 775 | + * | ||
| 776 | + * @return 0 if ok, error code if not (sets errno). | ||
| 777 | + * | ||
| 778 | + * @retval EINVAL Invalid session. | ||
| 779 | + * @retval ENOTCONN Not connected to host. | ||
| 780 | + * | ||
| 781 | + */ | ||
| 782 | + LIB3270_EXPORT int lib3270_get_cursor_position(const H3270 *hSession, unsigned short *row, unsigned short *col); | ||
| 783 | + | ||
| 784 | + /** | ||
| 770 | * @brief Move cursor | 785 | * @brief Move cursor |
| 771 | * | 786 | * |
| 772 | * @param h Session handle. | 787 | * @param h Session handle. |