summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/cmd_blk.c17
-rw-r--r--cmd/cmd_cd.c32
-rw-r--r--cmd/cmd_close.c26
-rw-r--r--cmd/cmd_dump.c28
-rw-r--r--cmd/cmd_dumps.c36
-rw-r--r--cmd/cmd_dumpx.c55
-rw-r--r--cmd/cmd_flags.c44
-rw-r--r--cmd/cmd_info.c45
-rw-r--r--cmd/cmd_ls.c41
-rw-r--r--cmd/cmd_open.c40
-rw-r--r--cmd/cmd_pos.c25
-rw-r--r--cmd/cmd_pwd.c36
-rw-r--r--cmd/cmd_read.c29
-rw-r--r--cmd/cmd_seek.c61
-rw-r--r--cmd/cmd_size.c25
-rw-r--r--cmd/cmd_write.c91
-rw-r--r--cmd/cmd_writes.c46
17 files changed, 677 insertions, 0 deletions
diff --git a/cmd/cmd_blk.c b/cmd/cmd_blk.c
new file mode 100644
index 0000000..db64f42
--- /dev/null
+++ b/cmd/cmd_blk.c
@@ -0,0 +1,17 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+int c_blk( cmd_arg_t *arg )
+{
+ printf("FILE BLOCK SIZE %u\n", g_file->blk_size );
+ printf("BUFFER BLOCK SIZE %d (MAX %d)\n", g_buf->size, g_buf->buf_size );
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_cd.c b/cmd/cmd_cd.c
new file mode 100644
index 0000000..652217c
--- /dev/null
+++ b/cmd/cmd_cd.c
@@ -0,0 +1,32 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+int c_cd( cmd_arg_t *arg )
+{
+ int argc = arg->argc;
+ char **argv = arg->argv;
+ int fret = -1;
+
+ if ( argc != 1 )
+ {
+ printf("Only 1 argument needed\n");
+ return -1;
+ }
+
+ //printf("[%s]\n", argv[0]);
+ fret = chdir( argv[0] );
+ if ( fret == -1 )
+ {
+ printf("Cannot set dir to %s\n", argv[0]);
+ return -1;
+ }
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_close.c b/cmd/cmd_close.c
new file mode 100644
index 0000000..d1d6fc7
--- /dev/null
+++ b/cmd/cmd_close.c
@@ -0,0 +1,26 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+/*
+CLOSE
+*/
+int c_close( cmd_arg_t *arg )
+{
+ int fret = 0;
+
+ fret = file_close( g_file );
+ if ( fret != 0 )
+ {
+ printf("Cannot close file\n");
+ return -1;
+ }
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_dump.c b/cmd/cmd_dump.c
new file mode 100644
index 0000000..a11a2d0
--- /dev/null
+++ b/cmd/cmd_dump.c
@@ -0,0 +1,28 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+int c_dump( cmd_arg_t *arg )
+{
+ int i;
+
+ if ( g_buf->buf == NULL)
+ {
+ printf("Buffer to print empty\n");
+ return -1;
+ }
+
+ for (i=0; i<g_buf->size; i++)
+ {
+ printf("%02x",(unsigned char)g_buf->buf[i]);
+ }
+ printf("\n");
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_dumps.c b/cmd/cmd_dumps.c
new file mode 100644
index 0000000..4f3461c
--- /dev/null
+++ b/cmd/cmd_dumps.c
@@ -0,0 +1,36 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+int c_dumps( cmd_arg_t *arg )
+{
+ int argc = arg->argc;
+ char **argv = arg->argv;
+ int i=0;
+
+ if ( argc != 0 )
+ {
+ printf("No arguments plz\n");
+ return -1;
+ }
+
+ for (i=0; i<g_buf->size; i++)
+ {
+ if (isprint(g_buf->buf[i]))
+ {
+ printf("%c", g_buf->buf[i]);
+ } else
+ {
+ printf("\e[7m.\e[0m");
+ }
+ }
+ printf("\n");
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_dumpx.c b/cmd/cmd_dumpx.c
new file mode 100644
index 0000000..d6228fd
--- /dev/null
+++ b/cmd/cmd_dumpx.c
@@ -0,0 +1,55 @@
+#include <ctype.h>
+#include <string.h>
+
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+int c_dumpx( cmd_arg_t *arg )
+{
+ int i,j;
+
+ if ( g_buf->buf == NULL)
+ {
+ printf("Buffer to print empty\n");
+ return -1;
+ }
+
+ for (i=0; i<g_buf->size; i+=16)
+ {
+ for (j=i; j<i+16; j++)
+ {
+ if ( j<g_buf->size )
+ {
+ printf("%02x ",(unsigned char)g_buf->buf[j]);
+ } else
+ {
+ printf(" ");
+ }
+ }
+
+ for (j=i; j<i+16; j++)
+ {
+ if ( j<g_buf->size ) //wrong place move to cycle?
+ {
+ if ( isprint(g_buf->buf[j]) )
+ {
+ printf("%c",(unsigned char)g_buf->buf[j]);
+ } else
+ {
+ printf("\e[7m.\e[0m");
+ }
+ }
+ }
+ printf("\n");
+ }
+ printf("\n");
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_flags.c b/cmd/cmd_flags.c
new file mode 100644
index 0000000..0c4a8bd
--- /dev/null
+++ b/cmd/cmd_flags.c
@@ -0,0 +1,44 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+int c_flags( cmd_arg_t *arg )
+{
+ int argc = arg->argc;
+ char **argv = arg->argv;
+
+ if ( argc == 0 )
+ {
+ printf("FLAGS: 0x%08x\n", g_flags );
+ return 0;
+ }
+
+ if ( argc > 1 )
+ {
+ printf("Only one argument needed\n");
+ return -1;
+ }
+
+ if ( strncmp(argv[0],"R",2) == 0 )
+ {
+ g_flags = FD_RO;
+ } else if ( strncmp(argv[0],"W",2) == 0 )
+ {
+ g_flags = FD_WO;
+ } else if ( strncmp(argv[0],"RW",3) == 0 )
+ {
+ g_flags = FD_RW;
+ } else
+ {
+ printf("Unknown mode. Suported R/W/RW\n");
+ return -1;
+ }
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_info.c b/cmd/cmd_info.c
new file mode 100644
index 0000000..b06f8bc
--- /dev/null
+++ b/cmd/cmd_info.c
@@ -0,0 +1,45 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+/*
+FILE
+*/
+int c_info( cmd_arg_t *arg )
+{
+
+ if ( g_file == NULL )
+ {
+ printf("no opened files\n");
+ } else
+ {
+ printf("FILE INFO:\n");
+ printf("NAME : %s\n", g_file->filename );
+ printf("FD : %d\n", g_file->fd );
+ printf("FLAGS : 0x%08x\n", g_file->flags );
+ printf("MODE : 0x%08x\n", g_file->mode );
+ printf("OFFSET : %zd\n", g_file->offset );
+ printf("POSITION: %ld\n", g_file->position );
+ printf("SIZE : %zd\n", g_file->size );
+ printf("BLOCK : %u\n", g_file->blk_size );
+ }
+
+ if ( g_buf == NULL )
+ {
+ printf("buffer not initialised\n");
+ } else
+ {
+ printf("BUF:\n");
+ printf("ADDR : %p\n", g_buf->buf);
+ printf("SIZE : %d\n", g_buf->size);
+ printf("BUFSIZE: %d\n", g_buf->buf_size);
+ }
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_ls.c b/cmd/cmd_ls.c
new file mode 100644
index 0000000..a3c642e
--- /dev/null
+++ b/cmd/cmd_ls.c
@@ -0,0 +1,41 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+int c_ls( cmd_arg_t *arg )
+{
+ int argc = arg->argc;
+ //char **argv = arg->argv;
+ uint8_t **f_ls = NULL;
+ int i=0;
+
+ if (argc > 0)
+ {
+ printf("Plz dont use arguments\n");
+ return -1;
+ }
+
+ f_ls = dir_list("./");
+ if ( f_ls == NULL )
+ {
+ printf("Cannot list current directory\n");
+ return -1;
+ }
+
+ i = 0;
+ while ( f_ls[i] != NULL )
+ {
+ printf("%s\n",f_ls[i]);
+ free( f_ls[i] );
+ i++;
+ }
+ free( f_ls );
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_open.c b/cmd/cmd_open.c
new file mode 100644
index 0000000..bbdfc48
--- /dev/null
+++ b/cmd/cmd_open.c
@@ -0,0 +1,40 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+/*
+OPEN <FILENAME>
+*/
+int c_open( cmd_arg_t *arg )
+{
+
+ int argc = arg->argc;
+ char **argv = arg->argv;
+ char *fname = NULL;
+ int fret = 0;
+
+ if ( argc != 1 )
+ {
+ printf("Neeed one argument\n");
+ return -1;
+ }
+
+ fname = argv[0];
+
+ fret = file_open_fn( g_file, fname, g_flags ); //!if failure fields could be non empty inside struct
+ if ( fret < 0 )
+ {
+ printf("Cannot open file %s\n",fname);
+ return -1;
+ }
+
+
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_pos.c b/cmd/cmd_pos.c
new file mode 100644
index 0000000..845d69d
--- /dev/null
+++ b/cmd/cmd_pos.c
@@ -0,0 +1,25 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+int c_pos( cmd_arg_t *arg )
+{
+ int fret = 0;
+
+ fret = file_pos( g_file );
+ if ( fret < 0)
+ {
+ printf("Cannot get file position\n");
+ return -1;
+ }
+
+ printf("POS:%d\n",fret);
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_pwd.c b/cmd/cmd_pwd.c
new file mode 100644
index 0000000..f14ece7
--- /dev/null
+++ b/cmd/cmd_pwd.c
@@ -0,0 +1,36 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+int c_pwd( cmd_arg_t *arg )
+{
+ int argc = arg->argc;
+ //char **argv = arg->argv;
+ char *cur_dir;
+
+ if ( argc > 0 )
+ {
+ printf("PLZ no arguments\n");
+ return -1;
+ }
+
+ cur_dir = get_current_dir_name();
+ if ( errno != 0 )
+ {
+ printf("Cannot get current dir\n");
+ free( cur_dir ); //on failure content unknown;
+ return -1;
+ }
+
+ printf("%s\n", cur_dir);
+ free( cur_dir );
+ cur_dir = NULL;
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_read.c b/cmd/cmd_read.c
new file mode 100644
index 0000000..965ae5a
--- /dev/null
+++ b/cmd/cmd_read.c
@@ -0,0 +1,29 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+int c_read( cmd_arg_t *arg )
+{
+ int ret;
+
+ if ( g_buf->buf == NULL )
+ {
+ printf("Buffer mem not allocated\n");
+ return -1;
+ }
+
+ ret = file_read_blk( g_file, g_buf->buf );
+ printf("Readed %d bytes\n", ret);
+ if ( (ret >= 0) && (ret <= g_buf->buf_size) )
+ {
+ g_buf->size = ret;
+ }
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_seek.c b/cmd/cmd_seek.c
new file mode 100644
index 0000000..b563231
--- /dev/null
+++ b/cmd/cmd_seek.c
@@ -0,0 +1,61 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+int c_seek( cmd_arg_t *arg )
+{
+ int fret;
+ int argc = arg->argc;
+ char **argv = arg->argv;
+ off_t offset;
+ int off_type = 0; //-1 seek down, 0 set pos, +1 seek up
+
+ if (argc != 1)
+ {
+ printf("One argument needed\n");
+ return -1;
+ }
+
+ if (g_file->fd == 0)
+ {
+ printf("File descriptor not set\n");
+ return -1;
+ }
+
+ //set seek type
+ switch( argv[0][0] )
+ {
+ case '+':
+ off_type = 1;
+ break;
+ case '-':
+ off_type = -1;
+ break;
+ default:
+ off_type = 0;
+ }
+
+ offset = atoi( argv[0] ); //!fix that to strtol at least
+
+ if (off_type == 0)
+ {
+ //g_file offset maybe wrong
+ fret = file_seekp( g_file, offset );
+ } else
+ {
+ fret = file_seek( g_file, offset );
+ }
+ if ( fret != 0 )
+ {
+ printf("Cannot seek postion to %zd\n", offset);
+ return -1;
+ }
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_size.c b/cmd/cmd_size.c
new file mode 100644
index 0000000..5f27ee1
--- /dev/null
+++ b/cmd/cmd_size.c
@@ -0,0 +1,25 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+int c_size( cmd_arg_t *arg )
+{
+ off_t size;
+
+ size = file_size( g_file );
+ if ( size < 0 )
+ {
+ printf("Cannot get file size\n");
+ return -1;
+ }
+
+ printf("File size %zu\n", size);
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_write.c b/cmd/cmd_write.c
new file mode 100644
index 0000000..f5d6e01
--- /dev/null
+++ b/cmd/cmd_write.c
@@ -0,0 +1,91 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+//support masks
+int c_write( cmd_arg_t *arg)
+{
+ /*
+ anonymous function
+ */
+ uint8_t hex2u8( uint8_t *buf )
+ {
+ uint8_t ret = 0x00;
+ unsigned long int uli;
+ char str[3];
+ str[0] = buf[0];
+ str[1] = buf[1];
+ str[2] = 0;
+
+ uli = strtoul( str, NULL, 16 );
+
+ ret = uli;
+
+ return ret;
+ }
+
+ int argc = arg->argc;
+ char **argv = arg->argv;
+ int i;
+ uint8_t *buf = NULL;
+ int fret;
+
+ if ( argc != 1 )
+ {
+ printf("One argument needed\n");
+ return -1;
+ }
+
+ if ( (strlen(argv[0])%2) != 0 )
+ {
+ printf("Input string should be ( str mod 2 == 0) \n");
+ return -1;
+ }
+
+ for (i=0;i<strlen(argv[0]);i++)
+ {
+ if ( !isxdigit(argv[0][i]) )
+ {
+ printf("CH %c not hexlike at pos %d\n", argv[0][i], i);
+ return -1;
+ }
+ }
+
+ if (strlen(argv[0]) > g_buf->size*2)
+ {
+ printf("Input param bigger then buffer\n");
+ return -1;
+ }
+
+
+ for (i=0; i<strlen(argv[0]); i+=2)
+ {
+ printf("%02x ",(unsigned char)hex2u8((unsigned char*)&argv[0][i]));
+ }
+ printf("\n");
+
+
+ buf = malloc(strlen(argv[0])/2);
+ for (i=0; i<(strlen(argv[0])/2); i++)
+ {
+ buf[i] = hex2u8((unsigned char*)&argv[0][i*2]);
+ }
+
+ memcpy( g_buf->buf, buf, strlen(argv[0])/2 );
+ fret = file_write_blk( g_file, g_buf->buf );
+ free( buf );
+
+ if ( fret < 0)
+ {
+ printf("Couldnt write block to file\n");
+ return -1;
+ }
+
+ return 0;
+} \ No newline at end of file
diff --git a/cmd/cmd_writes.c b/cmd/cmd_writes.c
new file mode 100644
index 0000000..1ddc95a
--- /dev/null
+++ b/cmd/cmd_writes.c
@@ -0,0 +1,46 @@
+#include "buf.h"
+#include "core.h"
+
+#include "libcmd/cmd.h"
+#include "libcmd/cmd_parse.h"
+
+extern file_t *g_file;
+extern buf_t *g_buf;
+extern int g_flags;
+
+//white spaces should be supported
+int c_writes( cmd_arg_t *arg )
+{
+ int argc = arg->argc;
+ char **argv = arg->argv;
+ int fret = 0;
+
+ if ( argc != 1)
+ {
+ printf("Need one argument mister\n");
+ return -1;
+ }
+
+ if (((g_buf == NULL) || (g_file == NULL)) || (g_buf->buf == NULL))
+ {
+ printf("Buffer or file not initialised");
+ return -1;
+ }
+
+ if ( strlen(argv[0]) <= g_buf->size )
+ {
+ memcpy( g_buf->buf, argv[0], strlen(argv[0]) );
+ fret = file_write_blk( g_file, g_buf->buf );
+ if ( fret < 0 )
+ {
+ printf("Couldnt write block to file\n");
+ return -1;
+ }
+ } else
+ {
+ printf("Input bigger then buffer buf %d input %zu\n", g_buf->size, strlen(argv[0]));
+ return -1;
+ }
+
+ return 0;
+}