From 5780fdaca5a2cd49c8218aec48cb6647374089ec Mon Sep 17 00:00:00 2001 From: kx Date: Wed, 28 Sep 2022 17:07:19 +0300 Subject: users list command implementation --- src/shell.c | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 src/shell.c (limited to 'src/shell.c') diff --git a/src/shell.c b/src/shell.c new file mode 100644 index 0000000..ade4d53 --- /dev/null +++ b/src/shell.c @@ -0,0 +1,152 @@ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include + + +/* **************************************************************** */ +/* */ +/* SILA Shell Commands */ +/* */ +/* **************************************************************** */ + +/* String to pass to system (). This is for the LIST, VIEW and RENAME + commands. */ +static char syscom[PATH_MAX]; + +/* List the file(s) named in arg. */ +int com_ls( char *arg ) +{ + if( !arg ) + arg = ""; + + sprintf( syscom, "ls -FClg %s", arg ); + return( system( syscom ) ); +} + +int com_id( char *arg ) +{ + if( !arg ) + arg = ""; + + sprintf( syscom, "id %s", arg ); + return( system( syscom ) ); +} + +int com_more( char *arg ) +{ + if( !valid_argument( "more", arg ) ) + return( 1 ); + + sprintf( syscom, "more %s", arg ); + return( system( syscom ) ); +} + +int com_vi( char *arg ) +{ + if( !valid_argument( "vi", arg ) ) + return( 1 ); + + sprintf( syscom, "vi %s", arg ); + return( system( syscom ) ); +} + +int com_rename( char *arg ) +{ + too_dangerous( "rename" ); + return( 1 ); +} + +int com_stat( char *arg ) +{ + struct stat finfo; + + if( !valid_argument( "stat", arg ) ) + return( 1 ); + + if( stat( arg, &finfo ) == -1 ) + { + perror( arg ); + return( 1 ); + } + + printf( "Statistics for `%s':\n", arg ); + + printf( "%s has %ld link%s, and is %ld byte%s in length.\n", arg, + finfo.st_nlink, + (finfo.st_nlink == 1) ? "" : "s", + finfo.st_size, + (finfo.st_size == 1) ? "" : "s"); + printf( "Inode Last Change at: %s", ctime( &finfo.st_ctime ) ); + printf( " Last access at: %s", ctime( &finfo.st_atime ) ); + printf( " Last modified at: %s", ctime( &finfo.st_mtime ) ); + return( 0 ); +} + +int com_delete( char *arg ) +{ + too_dangerous( "delete" ); + return( 1 ); +} + + +/* Change to the directory ARG. */ +int com_cd( char *arg ) +{ + if( !strcmp( arg, "~" ) ) + { + arg = getenv( "HOME" ); + } + + if( chdir( arg ) == -1 ) + { + perror( arg ); + return( 1 ); + } + + com_pwd( "" ); + return( 0 ); +} + +/* Print out the current working directory. */ +int com_pwd( char *ignore ) +{ + char dir[PATH_MAX], *s; + + s = getcwd( dir, PATH_MAX ); + if( s == 0 ) + { + printf( "Error getting pwd: %s\n", dir ); + return( 1 ); + } + + printf( "Current directory is: %s\n", dir ); + return( 0 ); +} + +int com_ping( char *arg ) +{ + if( !valid_argument( "ping", arg ) ) + return( 1 ); + + sprintf( syscom, "ping %s", arg ); + return( system( syscom ) ); +} -- cgit v1.2.3