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;
case ' ':
{
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), addr);
const int ASCII_MAX = 127;
if (atoi (input+1) + ASCII_MAX + 1 < UT8_MAX) {
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;
case '?':

View File

@ -3074,10 +3074,34 @@ R_API int r_core_visual_cmd(RCore *core, const char *arg) {
//r_core_cmd0 (core, "=H");
break;
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;
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;
case 'y':
if (core->print->ocur == -1) {

View File

@ -2,6 +2,8 @@
#include <r_core.h>
#define ASCII_MAX 127
/* maybe move this into RCore */
static bool marks_init = false;
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;
bool out = false;
if (!marks_init) {
return;
return out;
}
for (i = 0; i < UT8_MAX; i++) {
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) {
@ -33,7 +42,17 @@ R_API void r_core_visual_mark_set(RCore *core, ut8 ch, ut64 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) {
if (IS_DIGIT (ch)) {
ch += ASCII_MAX + 1;
}
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(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_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 int r_core_search_cb(RCore *core, ut64 from, ut64 to, RCoreSearchCallback cb);