From: Christian Heller <c.heller@plomlompom.de>
Date: Thu, 29 Aug 2013 23:19:05 +0000 (+0200)
Subject: Also read window title from config/windows/ files. To facilitate that, also corrected... 
X-Git-Tag: tce~1000
X-Git-Url: https://plomlompom.com/repos/%7B%7Bdb.prefix%7D%7D/static/%7B%7Bprefix%7D%7D/unset_cookie?a=commitdiff_plain;h=f8325a4ea617b15315183d7a8027c0b913c91034;p=plomrogue

Also read window title from config/windows/ files. To facilitate that, also corrected some init_win() behavior.
---

diff --git a/config/windows/Info b/config/windows/Info
index 5ebcc55..a8759ad 100644
--- a/config/windows/Info
+++ b/config/windows/Info
@@ -1,2 +1,3 @@
+Info
 3
 20
diff --git a/config/windows/Keys b/config/windows/Keys
index 8defa01..a719bf3 100644
--- a/config/windows/Keys
+++ b/config/windows/Keys
@@ -1,2 +1,3 @@
+Keys
 0
 29
diff --git a/config/windows/Log b/config/windows/Log
index 245603a..feef14f 100644
--- a/config/windows/Log
+++ b/config/windows/Log
@@ -1,2 +1,3 @@
+Log
 -4
 20
diff --git a/config/windows/Map b/config/windows/Map
index 7ed456a..a403ed8 100644
--- a/config/windows/Map
+++ b/config/windows/Map
@@ -1,2 +1,3 @@
+Map
 0
 -51
diff --git a/src/wincontrol.c b/src/wincontrol.c
index f4861d8..cfa593b 100644
--- a/src/wincontrol.c
+++ b/src/wincontrol.c
@@ -34,6 +34,9 @@ extern struct Win init_win_from_file(struct World * world, char * w_name,
     char * line = malloc(linemax);
     err = "Trouble in init_win_from_file() with fgets().";
     exit_err(NULL == fgets(line, linemax, file), world, err);
+    char * title = malloc(strlen(line));
+    memcpy(title, line, strlen(line) - 1);
+    exit_err(NULL == fgets(line, linemax, file), world, err);
     int16_t height = atoi(line);
     exit_err(NULL == fgets(line, linemax, file), world, err);
     int16_t width = atoi(line);
@@ -42,7 +45,10 @@ extern struct Win init_win_from_file(struct World * world, char * w_name,
     exit_err(fclose(file), world, err);
 
     struct WinMeta * wmeta = world->wins.meta;
-    return init_win(wmeta, w_name, height, width, world, f);
+    struct Win w;
+    init_win(wmeta, &w, title, height, width, world, f);
+    free(title);
+    return w;
 }
 
 
diff --git a/src/wincontrol.h b/src/wincontrol.h
index ba81ea3..c8dc83b 100644
--- a/src/wincontrol.h
+++ b/src/wincontrol.h
@@ -16,9 +16,9 @@ struct World;
 
 
 
-/* Wrapper around init_win() that reads the desired window size from a file
- * at the path prefixing the provided win name "w_name" with "config/windows/".
- * "f" is the window drawing function (Win._draw()).
+/* Wrapper around init_win() that reads the desired window size and title from a
+ * file at the path prefixing the provided win name "w_name" with
+ * "config/windows/". "f"() is the window drawing function (Win._draw()).
  */
 extern struct Win init_win_from_file(struct World * world, char * w_name,
                                      void (* f) (struct Win *));
diff --git a/src/windows.c b/src/windows.c
index efba919..af710dd 100644
--- a/src/windows.c
+++ b/src/windows.c
@@ -388,42 +388,46 @@ extern uint8_t init_win_meta(WINDOW * screen, struct WinMeta * wmeta)
 
 
 
-extern struct Win init_win(struct WinMeta * wmeta, char * title,
-                           int16_t height, int16_t width,
-                           void * data, void * func)
+extern uint8_t init_win(struct WinMeta * wmeta, struct Win * w, char * title,
+                        int16_t height, int16_t width,
+                        void * data, void * func)
 {
-    struct Win w;
-    w._prev             = 0;
-    w._next             = 0;
-    w.frame.curses_win  = 0;
-    w._title            = title;
-    w.data              = data;
-    w._draw             = func;
+    w->_prev             = 0;
+    w->_next             = 0;
+    w->frame.curses_win  = 0;
+    w->_title             = malloc(strlen(title) + 1);
+    if (NULL == w->_title)
+    {
+        return 1;
+    }
+    sprintf(w->_title, title, strlen(title));
+    w->data              = data;
+    w->_draw             = func;
     if      (0 < width)
     {
-        w.frame.size.x = width;
+        w->frame.size.x = width;
     }
     else if (0 > width)
     {
-        w.frame.size.x = wmeta->padframe.size.x + width;
+        w->frame.size.x = wmeta->padframe.size.x + width;
     }
     else
     {
-        w.frame.size.x = wmeta->padframe.size.x;
+        w->frame.size.x = wmeta->padframe.size.x;
     }
     if      (0 < height && height <= wmeta->padframe.size.y - 1)
     {
-        w.frame.size.y = height;
+        w->frame.size.y = height;
     }
     else if (0 > height && wmeta->padframe.size.y + (height - 1) > 0)
     {
-        w.frame.size.y = wmeta->padframe.size.y + (height - 1);
+        w->frame.size.y = wmeta->padframe.size.y + (height - 1);
     }
     else
     {
-        w.frame.size.y = wmeta->padframe.size.y - 1;
+        w->frame.size.y = wmeta->padframe.size.y - 1;
     }
-    return w;
+    return 0;
 }
 
 
diff --git a/src/windows.h b/src/windows.h
index a98bbdb..0e3f79b 100644
--- a/src/windows.h
+++ b/src/windows.h
@@ -22,7 +22,7 @@
  *
  * Functions that return uint8_t return these error codes:
  * 0 - success
- * 1 - memory allocation error (of ncurses' pads/windows, or scroll hint texts)
+ * 1 - memory allocation error
  * 2 - would force virtual screen to grow beyond width or height of 2^16 cells
  *
  * TODO: Expose less internals to the API.
@@ -99,9 +99,9 @@ extern uint8_t init_win_meta(WINDOW * screen, struct WinMeta * wmeta);
 
 
 
-/* Create a window as child of "wmeta" titled "title" of "height" and "width"
- * and appointing "func"() to interpret and draw the content stored at "data"
- * if the window is visible.
+/* Initialize a window child of "wmeta" to "title", "height" and "width" and
+ * appointing "func"() to interpret and draw the content stored at "data" when
+ * the window is visible.
  *
  * Pass 0 for "width" to make the window as wide as the terminal screen. Pass
  * negative values for "width" to make the size so many cells smaller than the
@@ -111,12 +111,11 @@ extern uint8_t init_win_meta(WINDOW * screen, struct WinMeta * wmeta);
  * allowed height is also applied for positive values that exceed it or negative
  * values that would reduce the window height < 1 cell.
  *
- * Other members of the Win struct are initialized to 0. The window will stay
- * invisible until appended to the chain of visible windows via append_win().
+ * Other members of the Win struct are initialized to 0.
  */
-extern struct Win init_win(struct WinMeta * wmeta, char * title,
-                           int16_t height, int16_t width,
-                           void * data, void * func);
+extern uint8_t init_win(struct WinMeta * wmeta, struct Win * w, char * title,
+                        int16_t height, int16_t width,
+                        void * data, void * func);