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 | 202 | if(!lib3270_connected(session)) |
| 203 | 203 | return; |
| 204 | 204 | |
| 205 | - lib3270_set_cursor_address(session,session->select.end = baddr); | |
| 206 | - | |
| 207 | 205 | if(!session->selected) |
| 208 | 206 | { |
| 209 | 207 | session->select.begin = session->cursor_addr; |
| 210 | 208 | set_selected(session); |
| 211 | 209 | } |
| 212 | 210 | |
| 211 | + lib3270_set_cursor_address(session,session->select.end = baddr); | |
| 212 | + | |
| 213 | 213 | update_selection(session); |
| 214 | 214 | |
| 215 | 215 | } |
| ... | ... | @@ -391,3 +391,47 @@ LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir |
| 391 | 391 | |
| 392 | 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 | +} | ... | ... |