+static void com_scroll_top(void)
+{
+ int i = RINGBUFFER_SIZE - 1;
+ unsigned lines = 0;
+
+ while (i > 0 && !ringbuffer_get(bot_win_rb, i))
+ i--;
+ /* i is oldest entry */
+ for (; lines < bot.lines && i >= 0; i--) {
+ struct rb_entry *rbe = ringbuffer_get(bot_win_rb, i);
+ if (!rbe)
+ break;
+ lines += NUM_LINES(strlen(rbe->msg));
+ }
+ i++;
+ if (lines > 0 && scroll_position != i) {
+ scroll_position = i;
+ redraw_bot_win();
+ print_scroll_msg();
+ return;
+ }
+ print_in_bar(COLOR_ERRMSG, "top of buffer is shown\n");
+}
+
+static void com_cancel_scrolling(void)
+{
+
+ if (scroll_position == 0) {
+ print_in_bar(COLOR_ERRMSG, "bottom of buffer is shown\n");
+ return;
+ }
+ scroll_position = 0;
+ redraw_bot_win();
+}
+