summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFreeArtMan <dos21h@gmail.com>2019-09-29 13:20:49 +0100
committerFreeArtMan <dos21h@gmail.com>2019-09-29 13:20:49 +0100
commit318ecf8f8264b5e3f9c53686893e26eecf52a540 (patch)
treeaae40f2a5c3268033afe2f80b0a7e69da1b2218e
parent6dc830f768f77381b4c0991494b4ce90292c37a6 (diff)
downloadihe-318ecf8f8264b5e3f9c53686893e26eecf52a540.tar.gz
ihe-318ecf8f8264b5e3f9c53686893e26eecf52a540.zip
Easy commands pageup/pagedown added to fast list file content
-rw-r--r--cmd/cmd_pagedown.c98
-rw-r--r--cmd/cmd_pageup.c99
-rw-r--r--ihe.c12
-rw-r--r--ihe.h5
4 files changed, 210 insertions, 4 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
diff --git a/ihe.c b/ihe.c
index 4390586..aacd301 100644
--- a/ihe.c
+++ b/ihe.c
@@ -436,9 +436,15 @@ cmd_table_t tab[] = {
{"ls", c_ls, h_ls, NULL, NULL},
{"pwd", c_pwd, h_pwd, NULL, NULL},
{"cd", c_cd, h_cd, NULL, NULL},
- //{"create", c_create},
- //{"th", c_th},
- //{"tw", c_tw},
+ {"pageup", c_pageup, h_pageup, NULL, NULL},
+ {"pagedown", c_pagedown, h_pagedown, NULL, NULL},
+ //{"goto", c_goto, h_goto, NULL, NULL},
+ //{"bwrite", c_bwrite, h_bwrite, NULL, NULL},
+ //{"bread", c_bread, h_bread, NULL, NULL},
+ //{"create", c_create, h_create, NULL, NULL},
+ //{"th", c_th. h_th, NULL, NULL},
+ //{"tw", c_tw, h_tw, NULL, NULL},
+ //{"tfit", c_tfit, h_tfit, NULL, NULL},
{NULL, NULL , NULL, NULL, NULL},
};
diff --git a/ihe.h b/ihe.h
index 6f553c6..eb6c5db 100644
--- a/ihe.h
+++ b/ihe.h
@@ -53,6 +53,9 @@ int c_writes( cmd_arg_t *arg );
int h_writes( cmd_arg_t *arg );
int c_resize( cmd_arg_t *arg );
int h_resize( cmd_arg_t *arg );
-
+int c_pagedown( cmd_arg_t *arg );
+int h_pagedown( cmd_arg_t *arg );
+int c_pageup( cmd_arg_t *arg );
+int h_pageup( cmd_arg_t *arg );
#endif \ No newline at end of file