home · contact · privacy
Also read window title from config/windows/ files. To facilitate that, also corrected...
authorChristian Heller <c.heller@plomlompom.de>
Thu, 29 Aug 2013 23:19:05 +0000 (01:19 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Thu, 29 Aug 2013 23:19:05 +0000 (01:19 +0200)
config/windows/Info
config/windows/Keys
config/windows/Log
config/windows/Map
src/wincontrol.c
src/wincontrol.h
src/windows.c
src/windows.h

index 5ebcc55a7dd8a8fd76aa6c5847d19a8022f87537..a8759ad3a962c0218dee06d6e3b405cfe8bf55f1 100644 (file)
@@ -1,2 +1,3 @@
+Info
 3
 20
index 8defa01ae792d9d0dc0262f07bf20ffd109646f4..a719bf397ebd866b56abc84e5fa32a620134fef9 100644 (file)
@@ -1,2 +1,3 @@
+Keys
 0
 29
index 245603ac58d04dd04e4b3bff242287431743eed4..feef14f4eca5f674f7b0311ef96008af83019311 100644 (file)
@@ -1,2 +1,3 @@
+Log
 -4
 20
index 7ed456a248144224a927f3124402e2fab68812d4..a403ed8fbc60c30c9b4aad09140fe0329cc77f3c 100644 (file)
@@ -1,2 +1,3 @@
+Map
 0
 -51
index f4861d833c6869bc46947a5b3beb5c22651bd749..cfa593b42455b81e58dd1ff325c89a128a87d1a9 100644 (file)
@@ -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;
 }
 
 
index ba81ea36275bd3041f102ac62cc1fd13add04cd2..c8dc83ba79b430a37d41076e9a18a114ed057912 100644 (file)
@@ -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 *));
index efba9190ecbce74ef7f2a3cf703075534689af15..af710dd34657e6c06ae2b9fdcdd61b2adbbb6b6a 100644 (file)
@@ -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;
 }
 
 
index a98bbdb6708f8fc50c03d46be7cf4573be0b2f08..0e3f79bfd63dba060fb15fc3a7b27a9b8aa3c872 100644 (file)
@@ -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);