home · contact · privacy
List dependencies.
[plomrogue] / roguelike.c
index 0e7012e15f8e0ccc07dcb0cea8ab5489d11827b6..6d75aa949ae181b5afd9ac783874905fde314d17 100644 (file)
@@ -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; }