Commit 1f2d57d71951aae08dd10adb70e49ddff5ecd846
1 parent
498637d6
Exists in
master
and in
3 other branches
Implementando seleção pelo teclado
Showing
1 changed file
with
46 additions
and
2 deletions
Show diff stats
selection.c
| @@ -202,14 +202,14 @@ LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr) | @@ -202,14 +202,14 @@ LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr) | ||
| 202 | if(!lib3270_connected(session)) | 202 | if(!lib3270_connected(session)) |
| 203 | return; | 203 | return; |
| 204 | 204 | ||
| 205 | - lib3270_set_cursor_address(session,session->select.end = baddr); | ||
| 206 | - | ||
| 207 | if(!session->selected) | 205 | if(!session->selected) |
| 208 | { | 206 | { |
| 209 | session->select.begin = session->cursor_addr; | 207 | session->select.begin = session->cursor_addr; |
| 210 | set_selected(session); | 208 | set_selected(session); |
| 211 | } | 209 | } |
| 212 | 210 | ||
| 211 | + lib3270_set_cursor_address(session,session->select.end = baddr); | ||
| 212 | + | ||
| 213 | update_selection(session); | 213 | update_selection(session); |
| 214 | 214 | ||
| 215 | } | 215 | } |
| @@ -391,3 +391,47 @@ LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir | @@ -391,3 +391,47 @@ LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir | ||
| 391 | 391 | ||
| 392 | return 0; | 392 | return 0; |
| 393 | } | 393 | } |
| 394 | + | ||
| 395 | +LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, unsigned char sel) | ||
| 396 | +{ | ||
| 397 | + int cursor_addr = hSession->cursor_addr; | ||
| 398 | + | ||
| 399 | + if(!lib3270_connected(hSession)) | ||
| 400 | + return -1; | ||
| 401 | + | ||
| 402 | + switch(dir) | ||
| 403 | + { | ||
| 404 | + case LIB3270_DIR_UP: | ||
| 405 | + if(cursor_addr <= hSession->cols) | ||
| 406 | + return EINVAL; | ||
| 407 | + cursor_addr -= hSession->cols; | ||
| 408 | + break; | ||
| 409 | + | ||
| 410 | + case LIB3270_DIR_DOWN: | ||
| 411 | + if(cursor_addr >= (hSession->cols * (hSession->rows-1))) | ||
| 412 | + return EINVAL; | ||
| 413 | + cursor_addr += hSession->cols; | ||
| 414 | + break; | ||
| 415 | + | ||
| 416 | + case LIB3270_DIR_LEFT: | ||
| 417 | + if( (cursor_addr % hSession->cols) < 1) | ||
| 418 | + return EINVAL; | ||
| 419 | + cursor_addr--; | ||
| 420 | + break; | ||
| 421 | + | ||
| 422 | + case LIB3270_DIR_RIGHT: | ||
| 423 | + if( (cursor_addr % hSession->cols) >= (hSession->cols-1)) | ||
| 424 | + return EINVAL; | ||
| 425 | + cursor_addr++; | ||
| 426 | + break; | ||
| 427 | + | ||
| 428 | + default: | ||
| 429 | + return -1; | ||
| 430 | + } | ||
| 431 | + | ||
| 432 | + if(sel) | ||
| 433 | + lib3270_select_to(hSession,cursor_addr); | ||
| 434 | + else | ||
| 435 | + lib3270_set_cursor_address(hSession,cursor_addr); | ||
| 436 | + | ||
| 437 | +} |