about summary refs log tree commit diff stats
path: root/windows.c
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2012-03-06 01:49:29 +0000
committerJames Booth <boothj5@gmail.com>2012-03-06 01:49:29 +0000
commitd407500e6f1d8cdba620c68da13847c3d95b246b (patch)
tree30d6d093b3344ae0ec33ad5069b9099bd0c46a0c /windows.c
parent54c43b613c74873e05f40deff102f8b03c6a9c6f (diff)
downloadprofani-tty-d407500e6f1d8cdba620c68da13847c3d95b246b.tar.gz
Tidied paging
Diffstat (limited to 'windows.c')
-rw-r--r--windows.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/windows.c b/windows.c
index 82d7035a..aa03244d 100644
--- a/windows.c
+++ b/windows.c
@@ -320,35 +320,39 @@ void win_page_off(void)
 
 void win_handle_page(int *ch)
 {
-    if (*ch == KEY_PPAGE) {
-        int rows, cols;
-        getmaxyx(stdscr, rows, cols);
+    int rows, cols, y, x;
+    getmaxyx(stdscr, rows, cols);
+    getyx(_wins[_curr_prof_win].win, y, x);
 
-        _wins[_curr_prof_win].y_pos = _wins[_curr_prof_win].y_pos - (rows - 4);
-        if (_wins[_curr_prof_win].y_pos < 0)
-            _wins[_curr_prof_win].y_pos = 0;
+    int page_space = rows - 4;
+    int *page_start = &_wins[_curr_prof_win].y_pos;
+    
+    // page up
+    if (*ch == KEY_PPAGE) {
+        *page_start -= page_space;
+    
+        // went past beginning, show first page
+        if (*page_start < 0)
+            *page_start = 0;
        
         _wins[_curr_prof_win].paged = 1;
         dirty = TRUE;
-    } else if (*ch == KEY_NPAGE) {
-        int rows, cols, y, x;
-        getmaxyx(stdscr, rows, cols);
-        getyx(_wins[_curr_prof_win].win, y, x);
 
-        _wins[_curr_prof_win].y_pos = _wins[_curr_prof_win].y_pos + (rows - 4);
+    // page down
+    } else if (*ch == KEY_NPAGE) {
+        *page_start += page_space;
 
         // only got half a screen, show full screen
-        if ((y - _wins[_curr_prof_win].y_pos) < (rows - 4))
-            _wins[_curr_prof_win].y_pos = y - (rows - 4);
+        if ((y - (*page_start)) < page_space)
+            *page_start = y - page_space;
 
         // went past end, show full screen
-        else if (_wins[_curr_prof_win].y_pos >= y)
-            _wins[_curr_prof_win].y_pos = y - (rows - 4);
+        else if (*page_start >= y)
+            *page_start = y - page_space;
            
         _wins[_curr_prof_win].paged = 1;
         dirty = TRUE;
     }
-
 }
 
 static void _create_windows(void)