Commit d1d71e35799323ab5c5c1414ca105c35cbd716d2

Authored by perry.werneck@gmail.com
1 parent 473b5e60

Rômulo Silva Neiva - 29 de agosto de 2012 07:54

 * a rolagem do cursor para nas bordas superior e inferior ou seja, não percorre a janela ciclicamente.
Showing 1 changed file with 17 additions and 4 deletions   Show diff stats
selection.c
... ... @@ -695,6 +695,7 @@ LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir
695 695 LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, unsigned char sel)
696 696 {
697 697 int cursor_addr = hSession->cursor_addr;
  698 + int maxlen = hSession->cols * hSession->rows;
698 699  
699 700 if(!lib3270_connected(hSession))
700 701 return -1;
... ... @@ -702,25 +703,25 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u
702 703 switch(dir)
703 704 {
704 705 case LIB3270_DIR_UP:
705   - if(cursor_addr <= hSession->cols)
  706 + if(sel && cursor_addr <= hSession->cols)
706 707 return EINVAL;
707 708 cursor_addr -= hSession->cols;
708 709 break;
709 710  
710 711 case LIB3270_DIR_DOWN:
711   - if(cursor_addr >= (hSession->cols * (hSession->rows-1)))
  712 + if(sel && cursor_addr >= (hSession->cols * (hSession->rows-1)))
712 713 return EINVAL;
713 714 cursor_addr += hSession->cols;
714 715 break;
715 716  
716 717 case LIB3270_DIR_LEFT:
717   - if( (cursor_addr % hSession->cols) < 1)
  718 + if(sel && (cursor_addr % hSession->cols) < 1)
718 719 return EINVAL;
719 720 cursor_addr--;
720 721 break;
721 722  
722 723 case LIB3270_DIR_RIGHT:
723   - if( (cursor_addr % hSession->cols) >= (hSession->cols-1))
  724 + if(sel && (cursor_addr % hSession->cols) >= (hSession->cols-1))
724 725 return EINVAL;
725 726 cursor_addr++;
726 727 break;
... ... @@ -730,9 +731,21 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u
730 731 }
731 732  
732 733 if(sel)
  734 + {
733 735 lib3270_select_to(hSession,cursor_addr);
  736 + }
  737 + else if(cursor_addr >= maxlen)
  738 + {
  739 + cursor_move(hSession,cursor_addr % maxlen);
  740 + }
  741 + else if(cursor_addr < 0)
  742 + {
  743 + cursor_move(hSession,cursor_addr + maxlen);
  744 + }
734 745 else
  746 + {
735 747 cursor_move(hSession,cursor_addr);
  748 + }
736 749  
737 750 return 0;
738 751 }
... ...