static void cmd_fz(RCore *core, const char *input) { switch (*input) { case '?': r_core_cmd_help (core, help_msg_fz); break; case '.': { const char *a = NULL, *b = NULL; r_flag_zone_around (core->flags, core->offset, &a, &b); r_cons_printf ("%s %s\n", a?a:"~", b?b:"~"); } break; case ':': { const char *a, *b; int a_len = 0; int w = r_cons_get_size (NULL); r_flag_zone_around (core->flags, core->offset, &a, &b); if (a) { r_cons_printf ("[<< %s]", a); a_len = strlen (a) + 4; } int padsize = (w / 2) - a_len; int title_size = 12; if (a || b) { char *title = r_str_newf ("[ 0x%08"PFMT64x" ]", core->offset); title_size = strlen (title); padsize -= strlen (title) / 2; const char *halfpad = r_str_pad (' ', padsize); r_cons_printf ("%s%s", halfpad, title); free (title); } if (b) { padsize = (w / 2) - title_size - strlen (b) - 4; const char *halfpad = padsize > 1? r_str_pad (' ', padsize): ""; r_cons_printf ("%s[%s >>]", halfpad, b); } if (a || b) { r_cons_newline(); } } break; case ' ': r_flag_zone_add (core->flags, r_str_trim_ro (input + 1), core->offset); break; case '-': if (input[1] == '*') { r_flag_zone_reset (core->flags); } else { r_flag_zone_del (core->flags, input + 1); } break; case '*': r_flag_zone_list (core->flags, '*'); break; case 0: r_flag_zone_list (core->flags, 0); break; } }
R_API void r_print_addr(RPrint *p, ut64 addr) { char space[32] = { 0 }; const char *white; #define PREOFF(x) (p && p->cons &&p->cons->pal.x)?p->cons->pal.x PrintfCallback printfmt = (PrintfCallback) (p? p->cb_printf: printf); bool use_segoff = p? (p->flags & R_PRINT_FLAGS_SEGOFF): false; bool use_color = p? (p->flags & R_PRINT_FLAGS_COLOR): false; bool dec = p? (p->flags & R_PRINT_FLAGS_ADDRDEC): false; bool mod = p? (p->flags & R_PRINT_FLAGS_ADDRMOD): false; char ch = p? ((p->addrmod && mod)? ((addr % p->addrmod)? ' ': ','): ' '): ' '; if (use_segoff) { ut32 s, a; a = addr & 0xffff; s = (addr - a) >> 4; if (dec) { snprintf (space, sizeof (space), "%d:%d", s & 0xffff, a & 0xffff); white = r_str_pad (' ', 9 - strlen (space)); } if (use_color) { const char *pre = PREOFF(offset): Color_GREEN; const char *fin = Color_RESET; if (dec) { printfmt ("%s%s%s%c%s", pre, white, space, ch, fin); } else { printfmt ("%s%04x:%04x%c%s", pre, s & 0xffff, a & 0xffff, ch, fin); } } else { if (dec) { printfmt ("%s%s%c", white, space, ch); } else { printfmt ("%04x:%04x%c", s & 0xffff, a & 0xffff, ch); } } } else {