From ed160c85898e726c7daf6b329f5e807e760ba3ed Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Fri, 17 May 2013 02:33:18 +0200
Subject: [PATCH] Scrolling pad now also has its own function with its own
 sanity checks.

---
 roguelike.c | 6 +++---
 windows.c   | 7 +++++++
 windows.h   | 1 +
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/roguelike.c b/roguelike.c
index 362826c..e7ece3a 100644
--- a/roguelike.c
+++ b/roguelike.c
@@ -475,9 +475,9 @@ int main () {
     if      (key == get_action_key(world.keybindings, "quit"))
       break;
     else if (key == get_action_key(world.keybindings, "scroll pad right"))
-      win_meta.pad_offset++;
-    else if (key == get_action_key(world.keybindings, "scroll pad left") && win_meta.pad_offset > 0)
-      win_meta.pad_offset--;
+      scroll_pad (&win_meta, '+');
+    else if (key == get_action_key(world.keybindings, "scroll pad left"))
+      scroll_pad (&win_meta, '-');
     else if (key == get_action_key(world.keybindings, "toggle keys window"))
       toggle_window(&win_meta, &win_keys);
     else if (key == get_action_key(world.keybindings, "toggle map window"))
diff --git a/windows.c b/windows.c
index 121c9fa..cc9f0f2 100644
--- a/windows.c
+++ b/windows.c
@@ -15,6 +15,13 @@ struct WinMeta init_win_meta (WINDOW * screen) {
   win_meta.pad = newpad(win_meta.height, 1);
   return win_meta; }
 
+void scroll_pad (struct WinMeta * win_meta, char dir) {
+// Scroll pad left (if possible) or right.
+  if      ('+' == dir)
+    win_meta->pad_offset++;
+  else if ('-' == dir && win_meta->pad_offset > 0)
+    win_meta->pad_offset--; }
+
 struct Win init_window (struct WinMeta * win_meta, char * title) {
 // Create and populate Win struct with sane default values.
   struct Win win;
diff --git a/windows.h b/windows.h
index 779a672..23fbdc1 100644
--- a/windows.h
+++ b/windows.h
@@ -29,6 +29,7 @@ struct Corners {
   struct yx br; };
 
 struct  WinMeta init_win_meta (WINDOW *);
+void scroll_pad (struct WinMeta *, char);
 struct Win init_window (struct WinMeta *, char *);
 void append_window (struct WinMeta *, struct Win *);
 void suspend_window (struct WinMeta *, struct Win *);
-- 
2.30.2