Example #1
0
int SLscroll_pageup (SLscroll_Window_Type *win)
{
   SLscroll_Type *l, *top;
   unsigned int nrows, hidden_mask;
   unsigned int n;

   if (win == NULL)
     return -1;

   (void) SLscroll_find_top (win);

   nrows = win->nrows;

   if ((NULL != (top = win->top_window_line))
       && (nrows > 2))
     {
	n = 0;
	hidden_mask = win->hidden_mask;
	l = win->current_line;
	while ((l != NULL) && (l != top))
	  {
	     l = l->prev;
	     if ((hidden_mask == 0)
		 || ((l != NULL) && (0 == (l->flags & hidden_mask))))
	       n++;
	  }

	if (l != NULL)
	  {
	     unsigned int save_line_num;
	     int ret = 0;

	     win->current_line = l;
	     win->line_num -= n;

	     /* Compute a new top/bottom header */
	     save_line_num = win->line_num;

	     if ((0 == SLscroll_prev_n (win, nrows - 1))
		 && (n == 0))
	       ret = -1;

	     win->top_window_line = win->current_line;
	     win->current_line = l;
	     win->line_num = save_line_num;

	     find_window_bottom (win);
	     return ret;
	  }
     }

   if (nrows < 2) nrows++;
   if (0 == SLscroll_prev_n (win, nrows - 1))
     return -1;
   return 0;
}
Example #2
0
static void main_loop (void)
{
   int screen_start;

   while (1)
     {
	update_display ();
	switch (SLkp_getkey ())
	  {
	   case SL_KEY_ERR:
	   case 'q':
	   case 'Q':
	     demolib_exit (0);
	     break;

	   case SL_KEY_RIGHT:
	     Screen_Start += 1;
	     screen_start = Screen_Start;
	     SLsmg_set_screen_start (NULL, &screen_start);
	     break;

	   case SL_KEY_LEFT:
	     Screen_Start -= 1;
	     if (Screen_Start < 0) Screen_Start = 0;
	     screen_start = Screen_Start;
	     SLsmg_set_screen_start (NULL, &screen_start);
	     break;

	   case SL_KEY_UP:
	     SLscroll_prev_n (&Line_Window, 1);
	     Line_Window.top_window_line = Line_Window.current_line;
	     break;

	   case '\r':
	   case SL_KEY_DOWN:
	     SLscroll_next_n (&Line_Window, 1);
	     Line_Window.top_window_line = Line_Window.current_line;
	     break;

	   case SL_KEY_NPAGE:
	   case ' ': case 4:
	     SLscroll_pagedown (&Line_Window);
	     break;

	   case SL_KEY_PPAGE:
	   case 127: case 21:
	     SLscroll_pageup (&Line_Window);
	     break;

	   case APP_KEY_BOB:
	     while (-1 != SLscroll_pageup (&Line_Window))
	       ;
	     break;

	   case APP_KEY_EOB:
	     while (-1 != SLscroll_pagedown (&Line_Window))
	       ;
	     break;

	   default:
	     SLtt_beep ();
	  }
     }
}