diff options
author | Denys Vlasenko | 2017-09-13 23:02:51 +0200 |
---|---|---|
committer | Denys Vlasenko | 2017-09-13 23:02:51 +0200 |
commit | 62643017c3d5bc1bb9fff91553e52a47e7730a01 (patch) | |
tree | 142224bb30ff225f09c0454cf14585a66d302788 /miscutils/hexedit.c | |
parent | 8187e0143874e1bf0412263e716cf8c782a5aa16 (diff) | |
download | busybox-62643017c3d5bc1bb9fff91553e52a47e7730a01.zip busybox-62643017c3d5bc1bb9fff91553e52a47e7730a01.tar.gz |
hexedit: implement page up/down
function old new delta
hexedit_main 924 970 +46
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'miscutils/hexedit.c')
-rw-r--r-- | miscutils/hexedit.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/miscutils/hexedit.c b/miscutils/hexedit.c index ac38978..a995697 100644 --- a/miscutils/hexedit.c +++ b/miscutils/hexedit.c @@ -236,7 +236,7 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv) redraw(); printf(ESC"[1;10H"); /* position on 1st hex byte in first line */ -//TODO: //PgUp/PgDown; Home/End: start/end of line; '<'/'>': start/end of file +//TODO: //Home/End: start/end of line; '<'/'>': start/end of file //Backspace: undo //Enter: goto specified position //Ctrl-L: redraw @@ -249,12 +249,14 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv) for (;;) { char read_key_buffer[KEYCODE_BUFFER_SIZE]; + unsigned cnt; int32_t key; uint8_t byte; fflush_all(); key = read_key(STDIN_FILENO, read_key_buffer, -1); + cnt = 1; switch (key) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': @@ -307,7 +309,10 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv) putchar(' '); } break; + case KEYCODE_PAGEDOWN: + cnt = G.height; case KEYCODE_DOWN: + k_down: G.current_byte += 16; if (G.current_byte >= G.eof_byte) { move_mapping_further(); @@ -324,6 +329,8 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv) row--; redraw_cur_line(); } + if (--cnt) + goto k_down; break; case KEYCODE_LEFT: @@ -348,7 +355,10 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv) G.current_byte--; printf(ESC"[2D"); break; + case KEYCODE_PAGEUP: + cnt = G.height; case KEYCODE_UP: + k_up: if ((G.current_byte - G.addr) < 16) { move_mapping_lower(); if ((G.current_byte - G.addr) < 16) @@ -364,6 +374,8 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv) printf(ESC"M"); /* scroll up */ redraw_cur_line(); } + if (--cnt) + goto k_up; break; } } |