diff options
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/cmd_blk.c | 17 | ||||
| -rw-r--r-- | cmd/cmd_cd.c | 32 | ||||
| -rw-r--r-- | cmd/cmd_close.c | 26 | ||||
| -rw-r--r-- | cmd/cmd_dump.c | 28 | ||||
| -rw-r--r-- | cmd/cmd_dumps.c | 36 | ||||
| -rw-r--r-- | cmd/cmd_dumpx.c | 55 | ||||
| -rw-r--r-- | cmd/cmd_flags.c | 44 | ||||
| -rw-r--r-- | cmd/cmd_info.c | 45 | ||||
| -rw-r--r-- | cmd/cmd_ls.c | 41 | ||||
| -rw-r--r-- | cmd/cmd_open.c | 40 | ||||
| -rw-r--r-- | cmd/cmd_pos.c | 25 | ||||
| -rw-r--r-- | cmd/cmd_pwd.c | 36 | ||||
| -rw-r--r-- | cmd/cmd_read.c | 29 | ||||
| -rw-r--r-- | cmd/cmd_seek.c | 61 | ||||
| -rw-r--r-- | cmd/cmd_size.c | 25 | ||||
| -rw-r--r-- | cmd/cmd_write.c | 91 | ||||
| -rw-r--r-- | cmd/cmd_writes.c | 46 | 
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; +} | 
