// // Created by william on 1/6/24. // #include #include #include #include "debugger.h" #include "memory_view.h" #include "dialog.h" #include "program_view.h" #define CTRL_KEY_EXIT 3 #define CTRL_KEY_G 103 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) { InteractWindow windows[2]; InteractWindow *current_window; create_window(); memory_view_init(&windows[0], system->ram, 0, 0); program_view_init(&windows[1], system->ram, MEMORY_VIEW_WIDTH, 0); update_panels(); doupdate(); int keycode; while ((keycode = getch()) != CTRL_KEY_EXIT) { if (keycode == KEY_UP) { current_window->handle_cursor_move(current_window, 0, CURSOR_OFFSET_UP); } if (keycode == KEY_DOWN) { current_window->handle_cursor_move(current_window, 0, CURSOR_OFFSET_DOWN); } if (keycode == KEY_LEFT) { current_window->handle_cursor_move(current_window, CURSOR_OFFSET_LEFT, 0); } if (keycode == KEY_RIGHT) { current_window->handle_cursor_move(current_window, CURSOR_OFFSET_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(&m_view, input); memory_view_cursor_set_addr(&m_view, input); } } update_panels(); doupdate(); } window_inter_deinit(&windows[0]); window_inter_deinit(&windows[1]); endwin(); }