Improve visual mark ##visual

This commit is contained in:
Vanellope 2019-05-11 17:09:17 +09:00 committed by radare
parent 8cb2ad402b
commit c42d25c255
4 changed files with 56 additions and 9 deletions

View File

@ -562,9 +562,12 @@ rep:
break; break;
case ' ': case ' ':
{ {
const char *arg = strchr (input+2, ' '); const int ASCII_MAX = 127;
ut64 addr = arg? r_num_math (core->num, arg): core->offset; if (atoi (input+1) + ASCII_MAX + 1 < UT8_MAX) {
r_core_visual_mark_set (core, atoi (input+1), addr); const char *arg = strchr (input+2, ' ');
ut64 addr = arg? r_num_math (core->num, arg): core->offset;
r_core_visual_mark_set (core, atoi (input+1) + ASCII_MAX + 1, addr);
}
} }
break; break;
case '?': case '?':

View File

@ -3074,10 +3074,34 @@ R_API int r_core_visual_cmd(RCore *core, const char *arg) {
//r_core_cmd0 (core, "=H"); //r_core_cmd0 (core, "=H");
break; break;
case 'm': case 'm':
r_core_visual_mark (core, r_cons_readchar ()); {
r_cons_gotoxy (0, 0);
r_cons_printf (R_CONS_CLEAR_LINE"Set shortcut key for 0x%"PFMT64x"\n", core->offset);
r_cons_flush ();
int ch = r_cons_readchar ();
r_core_visual_mark (core, ch);
}
break;
case 'M':
{
r_cons_gotoxy (0, 0);
if (r_core_visual_mark_dump (core)) {
r_cons_printf (R_CONS_CLEAR_LINE"Remove a shortcut key from the list\n");
r_cons_flush ();
int ch = r_cons_readchar ();
r_core_visual_mark_del (core, ch);
}
}
break; break;
case '\'': case '\'':
r_core_visual_mark_seek (core, r_cons_readchar ()); {
r_cons_gotoxy (0, 0);
if (r_core_visual_mark_dump (core)) {
r_cons_flush ();
int ch = r_cons_readchar ();
r_core_visual_mark_seek (core, ch);
}
}
break; break;
case 'y': case 'y':
if (core->print->ocur == -1) { if (core->print->ocur == -1) {

View File

@ -2,6 +2,8 @@
#include <r_core.h> #include <r_core.h>
#define ASCII_MAX 127
/* maybe move this into RCore */ /* maybe move this into RCore */
static bool marks_init = false; static bool marks_init = false;
static ut64 marks[UT8_MAX + 1]; static ut64 marks[UT8_MAX + 1];
@ -14,16 +16,23 @@ R_API void r_core_visual_mark_reset(RCore *core) {
} }
} }
R_API void r_core_visual_mark_dump(RCore *core) { R_API bool r_core_visual_mark_dump(RCore *core) {
int i; int i;
bool out = false;
if (!marks_init) { if (!marks_init) {
return; return out;
} }
for (i = 0; i < UT8_MAX; i++) { for (i = 0; i < UT8_MAX; i++) {
if (marks[i] != UT64_MAX) { if (marks[i] != UT64_MAX) {
r_cons_printf ("fV %d 0x%"PFMT64x"\n", i, marks[i]); if (i > ASCII_MAX) {
r_cons_printf ("fV %d 0x%"PFMT64x"\n", i - ASCII_MAX - 1, marks[i]);
} else {
r_cons_printf ("fV %c 0x%"PFMT64x"\n", i, marks[i]);
}
out = true;
} }
} }
return out;
} }
R_API void r_core_visual_mark_set(RCore *core, ut8 ch, ut64 addr) { R_API void r_core_visual_mark_set(RCore *core, ut8 ch, ut64 addr) {
@ -33,7 +42,17 @@ R_API void r_core_visual_mark_set(RCore *core, ut8 ch, ut64 addr) {
marks[ch] = addr; marks[ch] = addr;
} }
R_API void r_core_visual_mark_del(RCore *core, ut8 ch) {
if (!marks_init) {
return;
}
marks[ch] = UT64_MAX;
}
R_API void r_core_visual_mark(RCore *core, ut8 ch) { R_API void r_core_visual_mark(RCore *core, ut8 ch) {
if (IS_DIGIT (ch)) {
ch += ASCII_MAX + 1;
}
r_core_visual_mark_set (core, ch, core->offset); r_core_visual_mark_set (core, ch, core->offset);
} }

View File

@ -442,7 +442,8 @@ R_API void r_core_visual_list(RCore *core, RList* list, ut64 seek, ut64 len, int
R_API void r_core_visual_mark_seek(RCore *core, ut8 ch); R_API void r_core_visual_mark_seek(RCore *core, ut8 ch);
R_API void r_core_visual_mark(RCore *core, ut8 ch); R_API void r_core_visual_mark(RCore *core, ut8 ch);
R_API void r_core_visual_mark_set(RCore *core, ut8 ch, ut64 addr); R_API void r_core_visual_mark_set(RCore *core, ut8 ch, ut64 addr);
R_API void r_core_visual_mark_dump(RCore *core); R_API void r_core_visual_mark_del(RCore *core, ut8 ch);
R_API bool r_core_visual_mark_dump(RCore *core);
R_API void r_core_visual_mark_reset(RCore *core); R_API void r_core_visual_mark_reset(RCore *core);
R_API int r_core_search_cb(RCore *core, ut64 from, ut64 to, RCoreSearchCallback cb); R_API int r_core_search_cb(RCore *core, ut64 from, ut64 to, RCoreSearchCallback cb);