X-Git-Url: https://plomlompom.com/repos/berlin_corona.txt?a=blobdiff_plain;f=src%2Fwincontrol.c;h=487b1fad03d70e47a89854fd762e9688bc1a983b;hb=9ec98895106f2f8dff847b84e2a75cc3d477583e;hp=ba397721ae25c8a97d50497653fe374307d3b243;hpb=a3f3ab528bed86b504ef831f5db81ea2f68e3cd3;p=plomrogue diff --git a/src/wincontrol.c b/src/wincontrol.c index ba39772..487b1fa 100644 --- a/src/wincontrol.c +++ b/src/wincontrol.c @@ -55,11 +55,11 @@ static void set_winconf(struct World * world, char id); /* Get WinConf by "id"; get id of WinConf mothering "win". */ static struct WinConf * get_winconf_by_id(struct World * world, char id); -/* Get window draw functin (Win->_draw) identified by "c". */ -static void * get_drawfunc_by_char(char c) +/* Get (Win->_draw) function identified by "c"; NULL if c not mapped to one. */ +static void * get_drawfunc_by_char(char c); /* Iterate over bytes of world->winconf_ids array. Re-start after null byte. */ -static char get_next_winconf_id(struct World * world) +static char get_next_winconf_id(struct World * world); @@ -86,49 +86,59 @@ static void create_winconf(char id, struct WinConf * wcp) static void init_winconf_from_file(struct World * world, char id) { - char * f_name = "init_winconf_from_file()"; + char * tmp = "init_winconf_from_file() on window id '_'"; + char * context = try_malloc(strlen(tmp) + 1, world, + "init_winconf_from_file()"); + memcpy(context, tmp, strlen(tmp) + 1); + context[strlen(tmp) - 2] = id; char * path = string_prefixed_id(world, "config/windows/Win_", id); - FILE * file = try_fopen(path, "r", world, f_name); + FILE * file = try_fopen(path, "r", world, context); free(path); - uint16_t linemax = get_linemax(file, world, f_name); + uint16_t linemax = get_linemax(file, world, context); char line[linemax + 1]; struct WinConf * winconf = get_winconf_by_id(world, id); - try_fgets(line, linemax + 1, file, world, f_name); - winconf->title = try_malloc(strlen(line), world, f_name); + try_fgets(line, linemax + 1, file, world, context); + winconf->title = try_malloc(strlen(line), world, context); memcpy(winconf->title, line, strlen(line) - 1); /* Eliminate newline char */ winconf->title[strlen(line) - 1] = '\0'; /* char at end of string. */ - try_fgets(line, linemax + 1, file, world, f_name); + try_fgets(line, linemax + 1, file, world, context); winconf->draw = line[0]; - try_fgets(line, linemax + 1, file, world, f_name); + try_fgets(line, linemax + 1, file, world, context); winconf->height = atoi(line); if (0 >= winconf->height) { winconf->height_type = 1; } - try_fgets(line, linemax + 1, file, world, f_name); + try_fgets(line, linemax + 1, file, world, context); winconf->width = atoi(line); if (0 >= winconf->width) { winconf->width_type = 1; } - try_fclose(file, world, f_name); + try_fclose(file, world, context); + free(context); } static void init_win_from_winconf(struct World * world, char id) { - char * err = "Trouble in init_win_from_file() with init_win()."; + char * tmp = "Trouble in init_win_from_file() with init_win() (win id: _)."; + char * err = try_malloc(strlen(tmp) + 1, world, "init_win_from_file()"); + memcpy(err, tmp, strlen(tmp) + 1); + err[strlen(tmp) - 3] = id; struct WinConf * winconf = get_winconf_by_id(world, id); + void * f = get_drawfunc_by_char(winconf->draw); + exit_err(NULL == f, world, err); exit_err(init_win(world->wmeta, &winconf->win, winconf->title, - winconf->height, winconf->width, world, - get_drawfunc_by_char(winconf->draw)), + winconf->height, winconf->width, world, f), world, err); + free(err); } @@ -449,7 +459,7 @@ extern void toggle_winconfig(struct World * world, struct Win * win) } else { - win->_draw = get_drawfunc_by_char(wcp->draw); // wcp->draw; + win->_draw = get_drawfunc_by_char(wcp->draw); wcp->view = 0; } }