remove 1350.c
parent
28adef7ed8
commit
aec3b06171
@ -1,121 +0,0 @@
|
|||||||
#include <locale.h>
|
|
||||||
#include <notcurses/notcurses.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
static struct ncplane *make_status_line_plane(struct ncplane *std_plane) {
|
|
||||||
struct ncplane_options opts = {0};
|
|
||||||
opts.rows = 1;
|
|
||||||
opts.cols = ncplane_dim_x(std_plane);
|
|
||||||
opts.y = ncplane_dim_y(std_plane) - 1;
|
|
||||||
opts.x = 0;
|
|
||||||
|
|
||||||
nccell c = CELL_CHAR_INITIALIZER(' ');
|
|
||||||
cell_set_bg_rgb8(&c, 0x20, 0x20, 0x20);
|
|
||||||
|
|
||||||
struct ncplane *status_line_plane = ncplane_create(std_plane, &opts);
|
|
||||||
ncplane_set_base_cell(status_line_plane, &c);
|
|
||||||
return status_line_plane;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void print_status_line(struct ncplane *plane) {
|
|
||||||
ncplane_putstr_aligned(plane, 0, NCALIGN_LEFT, " ?: help");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void print_help(struct ncplane *plane) {
|
|
||||||
ncplane_erase(plane);
|
|
||||||
ncplane_putstr_aligned(plane, 0, NCALIGN_LEFT,
|
|
||||||
" g: jump to address q: quit");
|
|
||||||
ncplane_putstr_aligned(plane, 0, NCALIGN_RIGHT,
|
|
||||||
"press any key to close help ");
|
|
||||||
}
|
|
||||||
|
|
||||||
static int query_address(struct notcurses *nc, struct ncplane *plane,
|
|
||||||
const char *question, uint16_t *address) {
|
|
||||||
int y = 0;
|
|
||||||
int x = strlen(question) + 1;
|
|
||||||
ncplane_translate(plane, NULL, &y, &x);
|
|
||||||
|
|
||||||
ncplane_printf_yx(plane, 0, 1, question);
|
|
||||||
notcurses_cursor_enable(nc, y, x);
|
|
||||||
|
|
||||||
struct ncplane_options plane_opts = {0};
|
|
||||||
plane_opts.rows = 1;
|
|
||||||
plane_opts.cols = 4;
|
|
||||||
plane_opts.y = 0;
|
|
||||||
plane_opts.x = strlen(question) + 1;
|
|
||||||
|
|
||||||
struct ncplane *reader_plane = ncplane_create(plane, &plane_opts);
|
|
||||||
uint64_t channels = 0;
|
|
||||||
channels_set_bg_alpha(&channels, CELL_ALPHA_TRANSPARENT);
|
|
||||||
ncplane_set_base(reader_plane, "", 0, channels);
|
|
||||||
|
|
||||||
struct ncreader_options reader_opts = {0};
|
|
||||||
reader_opts.flags = NCREADER_OPTION_CURSOR;
|
|
||||||
|
|
||||||
struct ncreader *reader = ncreader_create(reader_plane, &reader_opts);
|
|
||||||
notcurses_render(nc);
|
|
||||||
|
|
||||||
char32_t c;
|
|
||||||
struct ncinput input;
|
|
||||||
while ((c = notcurses_getc_blocking(nc, &input)) != NCKEY_ENTER &&
|
|
||||||
c != NCKEY_ESC) {
|
|
||||||
if (('0' <= c && c <= '9') || ('a' <= c && c <= 'f') ||
|
|
||||||
('A' <= c && c <= 'F') || c == NCKEY_BACKSPACE) {
|
|
||||||
ncreader_offer_input(reader, &input);
|
|
||||||
notcurses_render(nc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
char *contents;
|
|
||||||
ncreader_destroy(reader, &contents);
|
|
||||||
const int is_success =
|
|
||||||
(c != NCKEY_ESC && sscanf(contents, "%4hx", address) == 1) ? 0 : -1;
|
|
||||||
|
|
||||||
free(contents);
|
|
||||||
ncplane_erase(plane);
|
|
||||||
|
|
||||||
return is_success;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(void) {
|
|
||||||
setlocale(LC_ALL, "");
|
|
||||||
|
|
||||||
notcurses_options opts = {0};
|
|
||||||
opts.flags = NCOPTION_SUPPRESS_BANNERS;
|
|
||||||
|
|
||||||
struct notcurses *nc;
|
|
||||||
if ((nc = notcurses_core_init(&opts, NULL)) == NULL) {
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct ncplane *std_plane = notcurses_stdplane(nc);
|
|
||||||
struct ncplane *status_line_plane = make_status_line_plane(std_plane);
|
|
||||||
|
|
||||||
ncplane_move_top(status_line_plane);
|
|
||||||
|
|
||||||
struct ncinput input = {0};
|
|
||||||
bool quit = false;
|
|
||||||
while (!quit) {
|
|
||||||
print_status_line(status_line_plane);
|
|
||||||
notcurses_render(nc);
|
|
||||||
notcurses_getc_blocking(nc, &input);
|
|
||||||
switch (input.id) {
|
|
||||||
case '?':
|
|
||||||
print_help(status_line_plane);
|
|
||||||
notcurses_render(nc);
|
|
||||||
notcurses_getc_blocking(nc, &input);
|
|
||||||
ncplane_erase(status_line_plane);
|
|
||||||
break;
|
|
||||||
case 'g': {
|
|
||||||
uint16_t address;
|
|
||||||
query_address(nc, status_line_plane, "Jump to address: $", &address);
|
|
||||||
} break;
|
|
||||||
case 'q':
|
|
||||||
quit = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
notcurses_stop(nc);
|
|
||||||
}
|
|
Loading…
Reference in New Issue