diff options
Diffstat (limited to 'cmd/cmd_pagedown.c')
-rw-r--r-- | cmd/cmd_pagedown.c | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/cmd/cmd_pagedown.c b/cmd/cmd_pagedown.c new file mode 100644 index 0000000..8c4e3c4 --- /dev/null +++ b/cmd/cmd_pagedown.c @@ -0,0 +1,98 @@ +#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_pagedown( 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; +} + +int h_pagedown( cmd_arg_t *arg ) +{ + printf("- move position +block_size and dumpx"); + return 0; +}
\ No newline at end of file |