Skip to content

Commit a0d9116

Browse files
committed
Scrolling though file added
Signed-off-by: Manuel Bertele <manuel.bertele2003@gmail.com>
1 parent 18841d6 commit a0d9116

3 files changed

Lines changed: 49 additions & 23 deletions

File tree

include/draw.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010

1111
void gui_init();
1212
void gui_draw_title(char *format, ...);
13-
void gui_draw_hex(byte *file);
14-
void draw_cursor_reset();
15-
void draw_cursor_up();
16-
void draw_cursor_down();
17-
void draw_cursor_right();
18-
void draw_cursor_left();
13+
void gui_draw_hex(byte *file, unsigned int file_current_offset);
14+
void draw_cursor_reset(unsigned int *file_current_offset);
15+
void draw_cursor_up(unsigned int *file_current_offset, byte *file);
16+
void draw_cursor_down(unsigned int *file_current_offset, byte *file);
17+
void draw_cursor_right(unsigned int *file_current_offset, byte *file);
18+
void draw_cursor_left(unsigned int *file_current_offset, byte *file);
1919
void gui_end();
2020

2121
#endif

src/draw.c

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,17 @@ void gui_draw_title(char *format, ...) {
7474

7575
}
7676

77-
void gui_draw_hex(byte *file) {
77+
void gui_draw_hex(byte *file, unsigned int file_current_offset) {
7878

79+
file += file_current_offset;
7980
unsigned int hex_per_line = getmaxx(hex) / 3;
8081
unsigned int file_max_drawable = hex_per_line * getmaxy(hex);
8182
unsigned int file_size = strlen(file);
8283
unsigned int file_draw_size = (file_max_drawable < file_size) ? file_max_drawable : file_size;
8384
unsigned int line = 0;
8485
unsigned int i;
86+
wmove(hex, 0, 0);
87+
wmove(text, 0, 0);
8588
for (i = 0; i < file_draw_size; i += hex_per_line, ++line) {
8689
for (unsigned int j = 0; (j < hex_per_line) && (i + j < file_draw_size); ++j) {
8790
wprintw(hex, "%02x ", file[i+j]);
@@ -96,10 +99,10 @@ void gui_draw_hex(byte *file) {
9699
wprintw(text, "%c", file[i+j]);
97100
}
98101
wprintw(text, "\n");
99-
mvwprintw(lines, line, 1, "0x%08x:", i);
102+
mvwprintw(lines, line, 1, "0x%08x:", i + file_current_offset);
100103

101104
}
102-
mvwprintw(lines, line, 1, "0x%08x:", i);
105+
mvwprintw(lines, line, 1, "0x%08x:", i + file_current_offset);
103106

104107
box(lines, ' ', 0);
105108
REFRESH_WINDOW(hex)
@@ -108,29 +111,49 @@ void gui_draw_hex(byte *file) {
108111

109112
}
110113

111-
void draw_cursor_reset() {
114+
void draw_cursor_reset(unsigned int *file_current_offset) {
112115

113116
wmove(hex, 0, 0);
114117
REFRESH_WINDOW(hex)
115118
}
116119

117-
void draw_cursor_up() {
120+
void draw_cursor_up(unsigned int *file_current_offset, byte *file) {
118121

119-
wmove(hex, getcury(hex) - 1, getcurx(hex));
122+
unsigned int maxy = getmaxy(hex);
123+
unsigned int cur_y = getcury(hex);
124+
unsigned int cur_x = getcurx(hex);
125+
unsigned int hex_per_line = getmaxx(hex) / 3;
126+
if (0 == cur_y && *file_current_offset > 0) {
127+
*file_current_offset -= hex_per_line;
128+
gui_draw_hex(file, *file_current_offset);
129+
wmove(hex, cur_y + 1, cur_x);
130+
} else {
131+
wmove(hex, cur_y - 1, cur_x);
132+
}
120133
REFRESH_WINDOW(hex)
121134
}
122135

123-
void draw_cursor_down() {
136+
void draw_cursor_down(unsigned int *file_current_offset, byte *file) {
124137

125-
wmove(hex, getcury(hex) + 1, getcurx(hex));
138+
unsigned int maxy = getmaxy(hex);
139+
unsigned int cur_y = getcury(hex);
140+
unsigned int cur_x = getcurx(hex);
141+
unsigned int hex_per_line = getmaxx(hex) / 3;
142+
if (maxy - 1 == cur_y) {
143+
*file_current_offset += hex_per_line;
144+
gui_draw_hex(file, *file_current_offset);
145+
wmove(hex, cur_y - 1, cur_x);
146+
} else {
147+
wmove(hex, cur_y + 1, cur_x);
148+
}
126149
REFRESH_WINDOW(hex)
127150
}
128-
void draw_cursor_right() {
151+
void draw_cursor_right(unsigned int *file_current_offset, byte *file) {
129152

130153
wmove(hex, getcury(hex), getcurx(hex) + 1);
131154
REFRESH_WINDOW(hex)
132155
}
133-
void draw_cursor_left() {
156+
void draw_cursor_left(unsigned int *file_current_offset, byte *file) {
134157

135158
wmove(hex, getcury(hex), getcurx(hex)-1);
136159
REFRESH_WINDOW(hex)

src/hexify.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,16 @@ int main(int argc, char *argv[]) {
4848
}
4949

5050
size_t file_size;
51+
unsigned int file_current_offset = 0;
5152
byte *file_content = file_name_get_content(file_name, &file_size);
5253

5354
gui_init();
5455
gui_draw_title("Opened file: %s", file_name);
5556

56-
gui_draw_hex(file_content);
57-
draw_cursor_reset();
57+
gui_draw_hex(file_content, file_current_offset);
58+
59+
60+
draw_cursor_reset(&file_current_offset);
5861

5962
int inp;
6063
while ((inp = getchar()) != 'q') {
@@ -63,7 +66,7 @@ int main(int argc, char *argv[]) {
6366

6467
case -1:
6568
gui_init();
66-
gui_draw_hex(file_content);
69+
gui_draw_hex(file_content, file_current_offset);
6770
gui_draw_title("Open file: %s", file_name);
6871
break;
6972

@@ -73,16 +76,16 @@ int main(int argc, char *argv[]) {
7376
switch (inp) {
7477

7578
case 'A':
76-
draw_cursor_up();
79+
draw_cursor_up(&file_current_offset, file_content);
7780
break;
7881
case 'B':
79-
draw_cursor_down();
82+
draw_cursor_down(&file_current_offset, file_content);
8083
break;
8184
case 'C':
82-
draw_cursor_right();
85+
draw_cursor_right(&file_current_offset, file_content);
8386
break;
8487
case 'D':
85-
draw_cursor_left();
88+
draw_cursor_left(&file_current_offset, file_content);
8689
break;
8790

8891
}

0 commit comments

Comments
 (0)