summaryrefslogtreecommitdiff
path: root/src/shell.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/shell.c')
-rw-r--r--src/shell.c152
1 files changed, 152 insertions, 0 deletions
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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/file.h>
+#include <sys/stat.h>
+#include <sys/errno.h>
+#include <limits.h>
+#include <unistd.h>
+#include <time.h>
+
+#include <readline/readline.h>
+#include <readline/history.h>
+
+#include <main.h>
+#include <commands.h>
+#include <completion.h>
+#include <utils.h>
+
+#include <shell.h>
+#include <users.h>
+
+
+/* **************************************************************** */
+/* */
+/* 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 ) );
+}