X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;ds=sidebyside;f=roguelike.c;h=6d75aa949ae181b5afd9ac783874905fde314d17;hb=33cce880190dd268fdb5dbf1be1c8a3e32b180d0;hp=0e7012e15f8e0ccc07dcb0cea8ab5489d11827b6;hpb=ceac4818f8615019c072abda374d2c723fa65b78;p=plomrogue diff --git a/roguelike.c b/roguelike.c index 0e7012e..6d75aa9 100644 --- a/roguelike.c +++ b/roguelike.c @@ -208,17 +208,17 @@ void draw_keys_window (struct Win * win) { struct KeyBinding * keybindings = world->keybindings; int offset = 0; if (keyswindata->max >= win->height) { - if (keyswindata->select > win->height / 2) + if (keyswindata->select > win->height / 2) { if (keyswindata->select < (keyswindata->max - (win->height / 2))) offset = keyswindata->select - (win->height / 2); else - offset = keyswindata->max - win->height + 1; } + offset = keyswindata->max - win->height + 1; } } int keydescwidth = 9 + 1; // max length assured by get_keyname() + \0 char * keydesc = malloc(keydescwidth); attr_t attri; int y, x; char * keyname; - for (y = 0; 0 != keybindings[offset + y].name && y < win->height; y++) { + for (y = 0; y <= keyswindata->max && y < win->height; y++) { attri = 0; if (y == keyswindata->select - offset) { attri = A_REVERSE; @@ -254,15 +254,15 @@ void init_keybindings(struct World * world) { struct KeyBinding * keybindings = malloc(lines * sizeof(struct KeyBinding)); fseek(file, 0, SEEK_SET); char * command = malloc(linemax); - char commcount = 0; + int commcount = 0; char * digits = malloc(3); - char digicount = 0; + int digicount = 0; int key, digimax; int keycount = 0; c = getc(file); while (EOF != c) { if ('\n' == c) { - keybindings[keycount].name = calloc(commcount, sizeof(char)); + keybindings[keycount].name = calloc(commcount + 1, sizeof(char)); memcpy(keybindings[keycount].name, command, commcount); keybindings[keycount].key = key; keycount++; @@ -416,5 +416,13 @@ int main () { update_info (&win_info); update_log (&win_log, "\nYou wait."); } } + free(map.cells); + for (key = 0; key <= world.keyswindata->max; key++) + free(world.keybindings[key].name); + free(world.keybindings); + free(world.keyswindata); + free(win_info.data); + free(win_log.data); + endwin(); return 0; }