+static char * get_kb_line_and_iterate(struct World * world,
+ struct KeyBinding ** kb_pp)
+{
+ char * f_name = "get_kb_line_and_iterate()";
+ struct KeyBinding * kb_p = * kb_pp;
+ char * keyname = get_name_to_keycode(world, kb_p->key);
+ char * cmd_dsc = get_command_longdsc(world, kb_p->name);
+ uint16_t size = 9 + 1 + strlen(cmd_dsc) + 1;
+ char * line = try_malloc(size, world, f_name);
+ sprintf(line, "%-9s %s", keyname, cmd_dsc);
+ free(keyname);
+ * kb_pp = kb_p->next;
+ return line;
+}
+
+
+
+static uint8_t scroll_hint_helper(struct World * world, uint16_t start,
+ uint16_t y, uint16_t offset, uint16_t n_owned,
+ struct Frame * frame, char * f_name)
+{
+ uint8_t ret = 0;
+ char * err_hint = trouble_msg(world, f_name, "draw_scroll_hint()");
+ if (start == y && offset > 0)
+ {
+ uint8_t test = draw_scroll_hint(frame, y, offset + 1, '^');
+ exit_err(test, world, err_hint);
+ ret = 1;
+ }
+ else if ( frame->size.y == y + 1
+ && n_owned > frame->size.y + offset - 1 - start)
+ {
+ uint8_t pos = n_owned - (offset + frame->size.y) + 2 + start;
+ uint8_t test = draw_scroll_hint(frame, y, pos, 'v');
+ exit_err(test, world, err_hint);
+ ret = 1;
+ }
+ free(err_hint);
+ return ret;
+}
+
+
+