summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/cmd_pagedown.c98
-rw-r--r--cmd/cmd_pageup.c99
2 files changed, 197 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
diff --git a/cmd/cmd_pageup.c b/cmd/cmd_pageup.c
new file mode 100644
index 0000000..4e0612b
--- /dev/null
+++ b/cmd/cmd_pageup.c
@@ -0,0 +1,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;
+} \ No newline at end of file