X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fclient%2Fdraw_wins.c;h=46ef8ed93e838fbf30889a71c0b8beef708342fa;hb=f8c8dd2e9da8323251fae5e464098228d1dcce60;hp=c61576c0370679d80ebafdfbeb08c3a71dfa4064;hpb=5017468632ebf51485743c7d71b569c78ab0cf7f;p=plomrogue diff --git a/src/client/draw_wins.c b/src/client/draw_wins.c index c61576c..46ef8ed 100644 --- a/src/client/draw_wins.c +++ b/src/client/draw_wins.c @@ -2,15 +2,14 @@ #include "draw_wins.h" #include /* attri_t, chtype */ +#include /* NULL */ #include /* uint8_t, uint16_t, uint32_t, int16_t */ #include /* for sprintf() */ #include /* free() */ #include /* strlen(), strtok() */ -#include "../common/try_malloc.h" /* for try_malloc() */ -#include "command_db.h" /* for get_command_longdsc */ +#include "../common/try_malloc.h" /* try_malloc() */ #include "keybindings.h" /* struct KeyBinding, get_keyname_to_keycode() */ -#include "wincontrol.h" /* struct WinConf, get_winconf_by_win() */ -#include "windows.h" /* struct Win */ +#include "windows.h" /* struct Win, get_win_by_id() */ #include "world.h" /* global world */ @@ -39,36 +38,36 @@ static void add_line(struct Win * w, char * line, attr_t attri); */ static void draw_text_from_bottom(struct Win * win, char * text); -/* Return keybinding list line via "kb_pp", iterate pointer pointed to by it. */ -static char * get_kb_line_and_iterate(struct KeyBinding ** kb_pp); +/* Return a properly formatted keybinding list line for "kb". */ +static char * get_kb_line(struct KeyBinding * kb); /* Draw from line "start" on config view for keybindings defined at "kb". */ static void draw_keybinding_config(struct Win * w, struct KeyBindingDB * kb, uint8_t start); /* Draw into window "w" from line "start" on a "title" followed by an empty - * line followed by a list of all keybindings starting at kb_p. + * line followed by a list of all keybindings starting in "kbdb". */ static uint16_t draw_titled_keybinding_list(char * title, struct Win * w, uint16_t start, - struct KeyBinding * kb_p); + struct KeyBindingDB * kbdb); static void try_resize_winmap(struct Win * w, int new_size_y, int new_size_x) { char * f_name = "try_resize_winmap()"; - if (w->winmapsize.y >= new_size_y && w->winmapsize.x >= new_size_x) + if (w->winmap_size.y >= new_size_y && w->winmap_size.x >= new_size_x) { return; } - if (w->winmapsize.y > new_size_y) + if (w->winmap_size.y > new_size_y) { - new_size_y = w->winmapsize.y; + new_size_y = w->winmap_size.y; } - else if (w->winmapsize.x > new_size_x) + else if (w->winmap_size.x > new_size_x) { - new_size_x = w->winmapsize.x; + new_size_x = w->winmap_size.x; } chtype * old_winmap = w->winmap; uint32_t new_size = sizeof(chtype) * new_size_y * new_size_x; @@ -76,9 +75,9 @@ static void try_resize_winmap(struct Win * w, int new_size_y, int new_size_x) uint16_t y, x; for (y = 0; y < new_size_y; y++) { - for (x = 0; y < w->winmapsize.y && x < w->winmapsize.x; x++) + for (x = 0; y < w->winmap_size.y && x < w->winmap_size.x; x++) { - chtype ch = old_winmap[(y * w->winmapsize.x) + x]; + chtype ch = old_winmap[(y * w->winmap_size.x) + x]; w->winmap[(y * new_size_x) + x] = ch; } for (; x < new_size_x; x++) @@ -87,15 +86,15 @@ static void try_resize_winmap(struct Win * w, int new_size_y, int new_size_x) } } free(old_winmap); - w->winmapsize.y = new_size_y; - w->winmapsize.x = new_size_x; + w->winmap_size.y = new_size_y; + w->winmap_size.x = new_size_x; } static void set_ch_on_yx(struct Win * w, int y, int x, chtype ch) { - w->winmap[(y * w->winmapsize.x) + x] = ch; + w->winmap[(y * w->winmap_size.x) + x] = ch; } @@ -104,10 +103,10 @@ static void add_text_with_linebreaks(struct Win * win, char * text) { uint16_t x, y; int16_t z = -1; - for (y = win->winmapsize.y; ; y++) + for (y = win->winmap_size.y; ; y++) { - try_resize_winmap(win, y + 1, win->framesize.x); - for (x = 0; x < win->framesize.x; x++) + try_resize_winmap(win, y + 1, win->frame_size.x); + for (x = 0; x < win->frame_size.x; x++) { z++; if ('\n' == text[z]) @@ -139,12 +138,12 @@ static void add_text_with_linebreaks(struct Win * win, char * text) static void add_line(struct Win * w, char * line, attr_t attri) { - uint16_t y = w->winmapsize.y; + uint16_t y = w->winmap_size.y; uint16_t len_line = strlen(line); if (attri - && w->winmapsize.x < w->framesize.x && w->framesize.x > len_line) + && w->winmap_size.x < w->frame_size.x && w->frame_size.x > len_line) { - try_resize_winmap(w, y + 1, w->framesize.x); + try_resize_winmap(w, y + 1, w->frame_size.x); } else { @@ -157,7 +156,7 @@ static void add_line(struct Win * w, char * line, attr_t attri) } if (attri) { - for (; x < w->framesize.x; x++) + for (; x < w->frame_size.x; x++) { set_ch_on_yx(w, y, x, ' ' | attri); } @@ -177,7 +176,7 @@ static void draw_text_from_bottom(struct Win * win, char * text) int16_t z = -1; for (y = 0; 0 == toggle; y++) { - for (x = 0; x < win->framesize.x; x++) + for (x = 0; x < win->frame_size.x; x++) { z++; if ('\n' == text[z]) @@ -200,16 +199,16 @@ static void draw_text_from_bottom(struct Win * win, char * text) /* Depending on what's bigger, determine start point in window or text. */ uint16_t start_y = 0; - if (y < win->framesize.y) + if (y < win->frame_size.y) { - start_y = win->framesize.y - y; + start_y = win->frame_size.y - y; } - else if (y > win->framesize.y) + else if (y > win->frame_size.y) { - uint16_t offset = y - win->framesize.y; + uint16_t offset = y - win->frame_size.y; for (y = 0; y < offset; y++) { - for (x = 0; x < win->framesize.x; x++) + for (x = 0; x < win->frame_size.x; x++) { z++; if ('\n' == text[z]) @@ -232,44 +231,40 @@ static void draw_text_from_bottom(struct Win * win, char * text) -static char * get_kb_line_and_iterate(struct KeyBinding ** kb_pp) +static char * get_kb_line(struct KeyBinding * kb) { - char * f_name = "get_kb_line_and_iterate()"; - struct KeyBinding * kb_p = * kb_pp; - char * keyname = get_keyname_to_keycode(kb_p->key); - char * cmd_dsc = get_command_longdsc(kb_p->command); - uint16_t size = 9 + 1 + strlen(cmd_dsc) + 1; - char * line = try_malloc(size, f_name); - sprintf(line, "%-9s %s", keyname, cmd_dsc); + char * f_name = "get_kb_line()"; + char * keyname = get_keyname_to_keycode(kb->keycode); + uint16_t size = 9 + 1 + strlen(kb->command->dsc_long) + 1; + char * kb_line = try_malloc(size, f_name); + sprintf(kb_line, "%-9s %s", keyname, kb->command->dsc_long); free(keyname); - * kb_pp = kb_p->next; - return line; + return kb_line; } -static void draw_keybinding_config(struct Win * w, struct KeyBindingDB * kb, +static void draw_keybinding_config(struct Win * w, struct KeyBindingDB * kbdb, uint8_t start) { - if (0 == kb->kbs) + if (0 == kbdb->n_of_kbs) { add_line(w, "(none)", 0); return; } - struct KeyBinding * kb_p = kb->kbs; - uint16_t y; - for (y = start; 0 != kb_p; y++) + uint16_t y, kb_n; + for (y = start, kb_n = 0; kb_n < kbdb->n_of_kbs; y++, kb_n++) { attr_t attri = 0; - if (y - start == kb->select) + if (y - start == kbdb->select) { attri = A_REVERSE; - if (1 == kb->edit) + if (1 == kbdb->edit) { attri = attri | A_BLINK; } } - char * kb_line = get_kb_line_and_iterate(&kb_p); + char * kb_line = get_kb_line(&kbdb->kbs[kb_n]); add_line(w, kb_line, attri); free(kb_line); } @@ -279,21 +274,22 @@ static void draw_keybinding_config(struct Win * w, struct KeyBindingDB * kb, static uint16_t draw_titled_keybinding_list(char * title, struct Win * w, uint16_t start, - struct KeyBinding * kb_p) + struct KeyBindingDB * kbdb) { uint16_t y; uint8_t state = 0; - for (y = start; (0 == state || 0 != kb_p); y++) + uint16_t kb_n = 0; + for (y = start; (0 == state || kb_n < kbdb->n_of_kbs); y++, kb_n++) { if (0 == state) { add_line(w, title, 0); y++; add_line(w, " ", 0); - state = 1 + (0 == kb_p); + state = 1 + (0 == kbdb->n_of_kbs); continue; } - char * kb_line = get_kb_line_and_iterate(&kb_p); + char * kb_line = get_kb_line(&kbdb->kbs[kb_n]); add_line(w, kb_line, 0); free(kb_line); } @@ -341,14 +337,10 @@ extern void draw_win_info(struct Win * win) { char * dsc_turn = "Turn: "; char * dsc_hitpoints = "\nHitpoints: "; - char * dsc_score = "\nScore: "; - uint16_t maxl = strlen(dsc_turn) + strlen(dsc_hitpoints) + strlen(dsc_score) - + 5 + 3 + 5; /* Max strlens of strings of numbers to use. */ + uint16_t maxl = strlen(dsc_turn) + 5 + strlen(dsc_hitpoints) + 3; char text[maxl + 1]; - sprintf(text, "%s%d%s%d%s%d", - dsc_turn, world.turn, - dsc_hitpoints, world.player_lifepoints, - dsc_score, world.score); + sprintf(text, "%s%d%s%d", + dsc_turn, world.turn, dsc_hitpoints, world.player_lifepoints); add_text_with_linebreaks(win, text); } @@ -359,12 +351,12 @@ extern void draw_win_inventory(struct Win * win) win->center.y = world.player_inventory_select; char inventory_copy[strlen(world.player_inventory) + 1]; sprintf(inventory_copy, "%s", world.player_inventory); - char * foo = inventory_copy; + char * strtok_target = inventory_copy; uint8_t i = 0; while (1) { - char * object = strtok(foo, "\n"); - foo = NULL; + char * object = strtok(strtok_target, "\n"); + strtok_target = NULL; if (NULL == object) { return; @@ -384,24 +376,24 @@ extern void draw_win_inventory(struct Win * win) extern void draw_win_available_keybindings(struct Win * win) { char * title = "Active window's keybindings:"; - struct KeyBinding * kb_p; - struct WinConf * wc = get_winconf_by_win(world.wmeta.active); - if (0 == wc->view) + struct KeyBindingDB * kbdb; + struct Win * w = get_win_by_id(world.winDB.active); + if (0 == w->view) { - kb_p = wc->kb.kbs; + kbdb = &w->kb; } - else if (1 == wc->view) + else if (1 == w->view) { - kb_p = world.kb_wingeom.kbs; + kbdb = &world.kb_wingeom; } - else if (2 == wc->view) + else if (2 == w->view) { - kb_p = world.kb_winkeys.kbs; + kbdb = &world.kb_winkeys; } - uint16_t offset = draw_titled_keybinding_list(title, win, 0, kb_p); + uint16_t offset = draw_titled_keybinding_list(title, win, 0, kbdb); add_line(win, " ", 0); - struct KeyBinding * kbs_glo = world.kb_global.kbs; - draw_titled_keybinding_list("Global keybindings", win, offset + 1, kbs_glo); + draw_titled_keybinding_list("Global keybindings", win, offset + 1, + &world.kb_global); } @@ -432,19 +424,17 @@ extern void draw_win_keybindings_winconf_keybindings(struct Win * win) extern void draw_winconf_keybindings(struct Win * win) { - struct WinConf * wc = get_winconf_by_win(win); char * title = "Window's keybindings:"; add_line(win, title, 0); add_line(win, " ", 0); - draw_keybinding_config(win, &wc->kb, 2); - win->center.y = wc->kb.select + 2; + draw_keybinding_config(win, &win->kb, 2); + win->center.y = win->kb.select + 2; } extern void draw_winconf_geometry(struct Win * win) { - struct WinConf * wcp = get_winconf_by_win(win); char * title = "Window's geometry:\n"; char * h_d = "\nHeight to save: "; char * h_pos = " (width in cells)"; @@ -454,11 +444,11 @@ extern void draw_winconf_geometry(struct Win * win) char * w_neg = " (negative diff: cells to screen height)"; char * h_t = h_pos; char * w_t = w_pos; - if (1 == wcp->height_type) + if (1 == win->target_height_type) { h_t = h_neg; } - if (1 == wcp->width_type) + if (1 == win->target_width_type) { w_t = w_neg; } @@ -466,7 +456,7 @@ extern void draw_winconf_geometry(struct Win * win) + strlen(h_t) + strlen(h_d) + 6 /* 6 = n of chars to */ + strlen(w_t) + strlen(w_d) + 6 + 1; /* write max int16_t */ char text[maxl + 1]; - sprintf(text, "%s%s%d%s%s%d%s", title, h_d, wcp->height, h_t, - w_d, wcp->width, w_t); + sprintf(text, "%s%s%d%s%s%d%s", title, h_d, win->target_height, h_t, + w_d, win->target_width, w_t); add_text_with_linebreaks(win, text); }