72 lines
1.5 KiB
C
72 lines
1.5 KiB
C
//
|
|
// Created by william on 1/6/24.
|
|
//
|
|
|
|
#include <curses.h>
|
|
#include <panel.h>
|
|
#include <stdlib.h>
|
|
#include "debugger.h"
|
|
#include "memory_view.h"
|
|
#include "dialog.h"
|
|
|
|
#define CTRL_KEY_EXIT 3
|
|
#define CTRL_KEY_G 103
|
|
|
|
MemoryView view;
|
|
|
|
void create_window() {
|
|
setenv("TERMINFO", "/usr/share/terminfo", 1);
|
|
setenv("TERM", "xterm", 1);
|
|
|
|
initscr();
|
|
raw();
|
|
noecho();
|
|
curs_set(0);
|
|
keypad(stdscr, true);
|
|
}
|
|
|
|
void start_debugger(System *system) {
|
|
create_window();
|
|
|
|
memory_view_init(&view, system->ram);
|
|
|
|
update_panels();
|
|
doupdate();
|
|
|
|
int keycode;
|
|
while ((keycode = getch()) != CTRL_KEY_EXIT) {
|
|
if (keycode == KEY_UP) {
|
|
memory_view_move_cursor(&view, 0, MEMORY_VIEW_DIRECTION_DOWN);
|
|
}
|
|
|
|
if (keycode == KEY_DOWN) {
|
|
memory_view_move_cursor(&view, 0, MEMORY_VIEW_DIRECTION_UP);
|
|
}
|
|
|
|
if (keycode == KEY_LEFT) {
|
|
memory_view_move_cursor(&view, MEMORY_VIEW_DIRECTION_LEFT, 0);
|
|
}
|
|
|
|
if (keycode == KEY_RIGHT) {
|
|
memory_view_move_cursor(&view, MEMORY_VIEW_DIRECTION_RIGHT, 0);
|
|
}
|
|
|
|
if (keycode == CTRL_KEY_G) {
|
|
Dialog dialog = dialog_create("Goto Address");
|
|
|
|
bool cancelled = false;
|
|
address input = dialog_get_address(&dialog, &cancelled);
|
|
dialog_remove(&dialog);
|
|
|
|
if (!cancelled) {
|
|
memory_view_goto(&view, input);
|
|
memory_view_set_cursor_addr(&view, input);
|
|
}
|
|
}
|
|
|
|
update_panels();
|
|
doupdate();
|
|
}
|
|
|
|
endwin();
|
|
} |