From: Christian Heller 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%7Bprefix%7D%7D/bar%20baz.html?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);