1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
#include "buf.h"
#include "core.h"
#include "libcmd/cmd.h"
#include "libcmd/cmd_parse.h"
extern file_t *g_file;
extern Buf *g_buf;
extern int g_flags;
/*
* blk - show block size
* blk <num> - set block size
*/
int c_pageup( cmd_arg_t *arg )
{
int argc = arg->argc;
char **argv = arg->argv;
int *type = arg->type;
int ret=-1;
int i,j;
//printf("Set file position\n");
//move position
int pos = file_pos(g_file);
//printf("pos %d\n",pos);
//printf("buf size %d\n",g_buf->size());
pos -= g_buf->size();
//printf("pos %d\n",pos);
file_seekp(g_file, pos);
//read from file
if (g_buf->isempty())
{
//buf_resize( g_buf, g_file->blk_size );
g_buf->realloc(g_file->blk_size);
}
//printf("read file\n");
char *buf_ptr;
int sz;
g_buf->get_ptr(&buf_ptr,&sz);
sz = g_buf->size();
//printf("sz %d ptr %lx",sz,buf_ptr);
ret = file_read_blk( g_file, (uint8_t *)buf_ptr, sz );
//printf("Readed %d bytes\n", ret);
if ( (ret >= 0) && (ret <= g_buf->size()) )
{
g_buf->set_size(ret);
}
//dump buffer
for (i=0; i<g_buf->cursize(); i+=16)
{
for (j=i; j<i+16; j++)
{
if ( j<g_buf->cursize() )
{
char c;
g_buf->getc(j,&c);
printf("%02x ",(unsigned char)c);
} else
{
printf(" ");
}
}
for (j=i; j<i+16; j++)
{
if ( j<g_buf->cursize() ) //wrong place move to cycle?
{
char c;
g_buf->getc(j,&c);
if ( isprint(c) )
{
printf("%c",(unsigned char)c);
} else
{
printf("\e[7m.\e[0m");
}
}
}
printf("\n");
}
printf("\n");
return 0;
return 0;
}
int h_pageup( cmd_arg_t *arg )
{
printf("- move down by block size,read and hexdump");
return 0;
}
|