1 #include "../libslang.h"
5 #include <sys/ttydefaults.h>
7 #include <linux/bitops.h>
8 #include "../../util/util.h"
9 #include "../../util/debug.h"
10 #include "../../util/symbol.h"
11 #include "../browser.h"
12 #include "../helpline.h"
15 static int ui_entry__read(
const char *title,
char *
bf,
size_t size,
int width)
17 struct newtExitStruct
es;
22 newtCenteredWindow(width, 1, title);
27 entry = newtEntry(0, 0,
"0x", width, &result, NEWT_FLAG_SCROLL);
31 newtFormAddComponent(form, entry);
32 newtFormAddHotKey(form, NEWT_KEY_ENTER);
33 newtFormAddHotKey(form, NEWT_KEY_ESCAPE);
34 newtFormAddHotKey(form, NEWT_KEY_LEFT);
35 newtFormAddHotKey(form,
CTRL(
'c'));
36 newtFormRun(form, &
es);
44 newtFormDestroy(form);
54 static void map_browser__write(
struct ui_browser *
self,
void *nd,
int row)
66 width =
self->width - ((mb->
addrlen * 2) + 4);
72 static u32 *symbol__browser_index(
struct symbol *
self)
77 static int map_browser__search(
struct map_browser *
self)
81 int err = ui_entry__read(
"Search by name/addr", target,
sizeof(target), 40);
86 if (target[0] ==
'0' &&
tolower(target[1]) ==
'x') {
93 u32 *
idx = symbol__browser_index(sym);
96 self->b.index =
self->b.top_idx = *
idx;
103 static int map_browser__run(
struct map_browser *
self)
108 "Press <- or ESC to exit, %s / to search",
109 verbose ?
"" :
"restart with -v to use") < 0)
116 map_browser__search(
self);
129 .entries = &
self->dso->symbols[
self->type],
132 .write = map_browser__write,
143 if (maxaddr < pos->
end)
146 u32 *
idx = symbol__browser_index(pos);
147 *idx = mb.
b.nr_entries;
153 return map_browser__run(&mb);