forked from KolibriOS/kolibrios
SHELL 0.8 changelog
- added mv command - added ren command - now ls works also with relative pathes - fixed bug in strrchr git-svn-id: svn://kolibrios.org@7802 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
d802f7476f
commit
b8b18f32a0
@ -15,6 +15,9 @@
|
|||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
#include "prototypes.h"
|
#include "prototypes.h"
|
||||||
|
|
||||||
|
// from main file (shell.c). TODO - in future move to library
|
||||||
|
void get_file_dir_loc(char *filepath, char *dir_path);
|
||||||
|
|
||||||
#include "system/console.c"
|
#include "system/console.c"
|
||||||
|
|
||||||
#include "cmd/cmd_about.c"
|
#include "cmd/cmd_about.c"
|
||||||
@ -42,6 +45,8 @@
|
|||||||
#include "cmd/cmd_uptime.c"
|
#include "cmd/cmd_uptime.c"
|
||||||
#include "cmd/cmd_history.c"
|
#include "cmd/cmd_history.c"
|
||||||
#include "cmd/cmd_cp.c"
|
#include "cmd/cmd_cp.c"
|
||||||
|
#include "cmd/cmd_mv.c"
|
||||||
|
#include "cmd/cmd_ren.c"
|
||||||
#include "cmd/cmd_waitfor.c"
|
#include "cmd/cmd_waitfor.c"
|
||||||
|
|
||||||
#include "modules/module_command.c"
|
#include "modules/module_command.c"
|
||||||
@ -52,4 +57,6 @@
|
|||||||
#include "modules/module_alias.c"
|
#include "modules/module_alias.c"
|
||||||
#include "modules/module_parameters.c"
|
#include "modules/module_parameters.c"
|
||||||
|
|
||||||
|
typedef unsigned int size_t;
|
||||||
|
|
||||||
/// ===========================================================
|
/// ===========================================================
|
||||||
|
@ -1,144 +1,152 @@
|
|||||||
|
|
||||||
int cmd_cp(char param[])
|
int cmd_cp(char param[])
|
||||||
{
|
{
|
||||||
|
char* argv[100];
|
||||||
|
int argc;
|
||||||
|
char *filename_in = NULL;
|
||||||
|
char *filename_out = NULL;
|
||||||
|
char *buffer = NULL;
|
||||||
|
|
||||||
char* argv[100];
|
kol_struct70 k70_in;
|
||||||
int argc;
|
kol_struct70 k70_out;
|
||||||
char *filename_in = NULL;
|
|
||||||
char *filename_out = NULL;
|
|
||||||
char *buffer = NULL;
|
|
||||||
|
|
||||||
kol_struct70 k70_in;
|
kol_struct_BDVK bdvk;
|
||||||
kol_struct70 k70_out;
|
|
||||||
|
|
||||||
kol_struct_BDVK bdvk;
|
unsigned long long filesize;
|
||||||
|
unsigned result, buf_size;
|
||||||
|
|
||||||
unsigned long long filesize;
|
argc = parameters_prepare(param, argv);
|
||||||
unsigned result, buf_size;
|
|
||||||
|
|
||||||
argc = parameters_prepare(param, argv);
|
if (argc != 2)
|
||||||
|
{
|
||||||
|
#if LANG_ENG
|
||||||
|
printf(" cp <file_in> <file_out>\n\r");
|
||||||
|
#elif LANG_RUS
|
||||||
|
printf(" cp <¨áâ®ç¨ª> <१ã«ìâ â>\n\r");
|
||||||
|
#endif
|
||||||
|
parameters_free(argc, argv);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
if (argc != 2)
|
filename_in = (char*) malloc(FILENAME_MAX);
|
||||||
{
|
filename_out = (char*) malloc(FILENAME_MAX);
|
||||||
#if LANG_ENG
|
|
||||||
printf(" cp <file_in> <file_out>\n\r");
|
|
||||||
#elif LANG_RUS
|
|
||||||
printf(" cp <¨áâ®ç¨ª> <१ã«ìâ â>\n\r");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
parameters_free(argc, argv);
|
if (argv[0][0] != '/')
|
||||||
|
{
|
||||||
|
strcpy(filename_in, cur_dir);
|
||||||
|
if (filename_in[strlen(filename_in)-1] != '/')
|
||||||
|
{
|
||||||
|
strcat(filename_in, "/"); // add slash
|
||||||
|
}
|
||||||
|
strcat(filename_in, argv[0]);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
strcpy(filename_in, argv[0]);
|
||||||
|
}
|
||||||
|
// -----
|
||||||
|
if (argv[1][0] != '/')
|
||||||
|
{
|
||||||
|
strcpy(filename_out, cur_dir);
|
||||||
|
if (filename_out[strlen(filename_out)-1] != '/')
|
||||||
|
{
|
||||||
|
strcat(filename_out, "/"); // add slash
|
||||||
|
}
|
||||||
|
strcat(filename_out, argv[1]);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
strcpy(filename_out, argv[1]);
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
// add ability to use directory as destination
|
||||||
}
|
if ( dir_check(filename_out) )
|
||||||
|
{
|
||||||
filename_in = (char*) malloc(FILENAME_MAX);
|
char *fname = strrchr(filename_in, '/') + 1; // always exist, as we add curdir
|
||||||
filename_out = (char*) malloc(FILENAME_MAX);
|
if (filename_out[strlen(filename_out)-1] != '/')
|
||||||
|
{
|
||||||
if (argv[0][0] != '/')
|
strcat(filename_out, "/"); // add slash
|
||||||
{
|
}
|
||||||
strcpy(filename_in, cur_dir);
|
strcat(filename_out, fname);
|
||||||
if (filename_in[strlen(filename_in)-1] != '/')
|
}
|
||||||
strcat(filename_in, "/"); // add slash
|
|
||||||
strcat(filename_in, argv[0]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strcpy(filename_in, argv[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argv[1][0] != '/')
|
|
||||||
{
|
|
||||||
strcpy(filename_out, cur_dir);
|
|
||||||
if (filename_out[strlen(filename_out)-1] != '/')
|
|
||||||
strcat(filename_out, "/"); // add slash
|
|
||||||
strcat(filename_out, argv[1]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strcpy(filename_out, argv[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// add ability to use directory as destination
|
|
||||||
if ( dir_check(filename_out) )
|
|
||||||
{
|
|
||||||
char *fname = strrchr(filename_in, '/') + 1; // always exist, as we add curdir
|
|
||||||
if (filename_out[strlen(filename_out)-1] != '/')
|
|
||||||
strcat(filename_out, "/"); // add slash
|
|
||||||
strcat(filename_out, fname);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
k70_in.p00 = 5;
|
k70_in.p00 = 5;
|
||||||
k70_in.p04 = 0LL;
|
k70_in.p04 = 0LL;
|
||||||
k70_in.p12 = 0;
|
k70_in.p12 = 0;
|
||||||
k70_in.p16 = (unsigned) &bdvk;
|
k70_in.p16 = (unsigned) &bdvk;
|
||||||
k70_in.p20 = 0;
|
k70_in.p20 = 0;
|
||||||
k70_in.p21 = filename_in;
|
k70_in.p21 = filename_in;
|
||||||
|
|
||||||
result = kol_file_70(&k70_in); // ¯®«ãç ¥¬ ¨ä®à¬ æ¨î ® ä ©«¥
|
result = kol_file_70(&k70_in); // get information about file
|
||||||
if ( 0 != result )
|
if ( 0 != result )
|
||||||
goto lbl_exit;
|
goto lbl_exit;
|
||||||
|
|
||||||
// count buffer size up to 1Mb, but no more than 1/2 of free memory
|
// count buffer size up to 1Mb, but no more than 1/2 of free memory
|
||||||
buf_size = 1 << 20; // 1Mb
|
buf_size = 1 << 20; // 1Mb
|
||||||
while( ((buf_size >> 10) > kol_system_memfree()) && (buf_size > 4096) )
|
while( ((buf_size >> 10) > kol_system_memfree()) && (buf_size > 4096) )
|
||||||
buf_size /= 2;
|
buf_size /= 2;
|
||||||
|
|
||||||
filesize = bdvk.p32; // ¯®«ãç ¥¬ à §¬¥à ä ©« (®£à ¨ç¥¨¥ - 4 ƒ¡ ©â ⮫쪮 ¤«ï FAT)
|
filesize = bdvk.p32; // getting file size (restriction - 4 GB only for FAT)
|
||||||
if (buf_size > filesize)
|
if (buf_size > filesize)
|
||||||
buf_size = (unsigned)filesize; // may be zero!
|
buf_size = (unsigned)filesize; // may be zero!
|
||||||
if (buf_size == 0) buf_size = 4096; // ...
|
if (buf_size == 0) buf_size = 4096; // ...
|
||||||
|
|
||||||
buffer = (char*) malloc(buf_size);
|
buffer = (char*) malloc(buf_size);
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
result = E_NOMEM;
|
result = E_NOMEM;
|
||||||
goto lbl_exit;
|
goto lbl_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
k70_in.p00 = 0;
|
k70_in.p00 = 0;
|
||||||
//k70_in.p08 = 0;
|
//k70_in.p08 = 0;
|
||||||
k70_in.p12 = buf_size;
|
k70_in.p12 = buf_size;
|
||||||
k70_in.p16 = (unsigned) buffer;
|
k70_in.p16 = (unsigned) buffer;
|
||||||
k70_in.p20 = 0;
|
k70_in.p20 = 0;
|
||||||
k70_in.p21 = filename_in;
|
k70_in.p21 = filename_in;
|
||||||
|
|
||||||
k70_out.p00 = 2;
|
k70_out.p00 = 2;
|
||||||
//k70_out.p08 = 0;
|
//k70_out.p08 = 0;
|
||||||
k70_out.p12 = buf_size;
|
k70_out.p12 = buf_size;
|
||||||
k70_out.p16 = (unsigned) buffer;
|
k70_out.p16 = (unsigned) buffer;
|
||||||
k70_out.p20 = 0;
|
k70_out.p20 = 0;
|
||||||
k70_out.p21 = filename_out;
|
k70_out.p21 = filename_out;
|
||||||
|
|
||||||
unsigned long long offset = 0;
|
unsigned long long offset = 0;
|
||||||
do {
|
do
|
||||||
k70_in.p04 = offset;
|
{
|
||||||
if (offset + buf_size > filesize) // last chunk
|
k70_in.p04 = offset;
|
||||||
{
|
if (offset + buf_size > filesize) // last chunk
|
||||||
k70_in.p12 = k70_out.p12 = (unsigned)(filesize - offset); // filesize % buf_size;
|
{
|
||||||
}
|
k70_in.p12 = k70_out.p12 = (unsigned)(filesize - offset); // filesize % buf_size;
|
||||||
|
}
|
||||||
|
|
||||||
result = kol_file_70(&k70_in); // ç⥨¥
|
result = kol_file_70(&k70_in); // read
|
||||||
if (result != 0)
|
if (result != 0)
|
||||||
goto lbl_exit;
|
{
|
||||||
|
goto lbl_exit;
|
||||||
|
}
|
||||||
|
|
||||||
k70_out.p04 = offset;
|
k70_out.p04 = offset;
|
||||||
result = kol_file_70(&k70_out); // § ¯¨áì
|
result = kol_file_70(&k70_out); // write
|
||||||
if (result != 0)
|
if (result != 0)
|
||||||
goto lbl_exit;
|
{
|
||||||
|
goto lbl_exit;
|
||||||
|
}
|
||||||
|
|
||||||
if (k70_out.p00 == 2)
|
if (k70_out.p00 == 2)
|
||||||
k70_out.p00 = 3; // ¬¥ï¥¬ äãªæ¨î á ᮧ¤ ¨ï (2) ¤®§ ¯¨áì (3)
|
{
|
||||||
offset += buf_size;
|
k70_out.p00 = 3; // changing function from create (2) to append (3)
|
||||||
} while (offset < filesize);
|
}
|
||||||
|
offset += buf_size;
|
||||||
|
} while (offset < filesize);
|
||||||
|
|
||||||
lbl_exit:
|
lbl_exit:
|
||||||
|
|
||||||
parameters_free(argc, argv);
|
parameters_free(argc, argv);
|
||||||
free(filename_in);
|
free(filename_in);
|
||||||
free(filename_out);
|
free(filename_out);
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
|
||||||
return (result == 0);
|
return (result == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ unsigned num_of_file; // number of files in directory
|
|||||||
unsigned *t;
|
unsigned *t;
|
||||||
unsigned type_of_file; // check is this a file or a folder
|
unsigned type_of_file; // check is this a file or a folder
|
||||||
int i, result;
|
int i, result;
|
||||||
|
char tmp[FILENAME_MAX];
|
||||||
|
|
||||||
bool single_column_mode = FALSE;
|
bool single_column_mode = FALSE;
|
||||||
|
|
||||||
@ -26,10 +27,24 @@ if (!strnicmp(dir,"-1",1))
|
|||||||
dir += 3;
|
dir += 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !strlen(dir) )
|
if ( !strlen(dir) ) // if argument is empty, list current directory
|
||||||
k70.p21 = cur_dir;
|
k70.p21 = cur_dir;
|
||||||
else
|
else
|
||||||
k70.p21 = dir;
|
{
|
||||||
|
if (dir[0] != '/') // if given directory is relative path, then append cur_dir on left side
|
||||||
|
{
|
||||||
|
strcpy(tmp, cur_dir);
|
||||||
|
if (tmp[strlen(tmp)-1] != '/')
|
||||||
|
{
|
||||||
|
strcat(tmp, "/"); // add slash
|
||||||
|
}
|
||||||
|
strcat(tmp, dir);
|
||||||
|
k70.p21 = tmp;
|
||||||
|
} else // if given directory is an absolute path
|
||||||
|
{
|
||||||
|
k70.p21 = dir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
result = kol_file_70(&k70);
|
result = kol_file_70(&k70);
|
||||||
if ( !((result==0) || (result==6)) ) // check does the directory exists
|
if ( !((result==0) || (result==6)) ) // check does the directory exists
|
||||||
|
164
programs/system/shell/cmd/cmd_mv.c
Normal file
164
programs/system/shell/cmd/cmd_mv.c
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
|
||||||
|
int cmd_mv(char param[])
|
||||||
|
{
|
||||||
|
char* argv[100];
|
||||||
|
int argc;
|
||||||
|
char *filename_in = NULL;
|
||||||
|
char *filename_out = NULL;
|
||||||
|
char *buffer = NULL;
|
||||||
|
|
||||||
|
kol_struct70 k70_in;
|
||||||
|
kol_struct70 k70_out;
|
||||||
|
|
||||||
|
kol_struct_BDVK bdvk;
|
||||||
|
|
||||||
|
unsigned long long filesize;
|
||||||
|
unsigned result, buf_size;
|
||||||
|
|
||||||
|
argc = parameters_prepare(param, argv);
|
||||||
|
|
||||||
|
/*
|
||||||
|
argv[0] - path (abs or rel) to file
|
||||||
|
argv[1] - new location: path (abs or rel) to dir or file
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
{
|
||||||
|
#if LANG_ENG
|
||||||
|
printf(" mv <file_in> <file_out>\n\r");
|
||||||
|
#elif LANG_RUS
|
||||||
|
printf(" mv <¨áâ®ç¨ª> <१ã«ìâ â>\n\r");
|
||||||
|
#endif
|
||||||
|
parameters_free(argc, argv);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
filename_in = (char*) malloc(FILENAME_MAX);
|
||||||
|
filename_out = (char*) malloc(FILENAME_MAX);
|
||||||
|
|
||||||
|
if (argv[0][0] != '/')
|
||||||
|
{
|
||||||
|
strcpy(filename_in, cur_dir);
|
||||||
|
if (filename_in[strlen(filename_in)-1] != '/')
|
||||||
|
{
|
||||||
|
strcat(filename_in, "/"); // add slash
|
||||||
|
}
|
||||||
|
strcat(filename_in, argv[0]);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
strcpy(filename_in, argv[0]);
|
||||||
|
}
|
||||||
|
// -----
|
||||||
|
if (argv[1][0] != '/')
|
||||||
|
{
|
||||||
|
strcpy(filename_out, cur_dir);
|
||||||
|
if (filename_out[strlen(filename_out)-1] != '/')
|
||||||
|
{
|
||||||
|
strcat(filename_out, "/"); // add slash
|
||||||
|
}
|
||||||
|
strcat(filename_out, argv[1]);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
strcpy(filename_out, argv[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add ability to use directory as destination
|
||||||
|
if ( dir_check(filename_out) )
|
||||||
|
{
|
||||||
|
char *fname = strrchr(filename_in, '/') + 1; // always exist, as we add curdir
|
||||||
|
if (filename_out[strlen(filename_out)-1] != '/')
|
||||||
|
{
|
||||||
|
strcat(filename_out, "/"); // add slash
|
||||||
|
}
|
||||||
|
strcat(filename_out, fname);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(filename_in, filename_out) == 0) // if source file and destination file are same then exist with success
|
||||||
|
{
|
||||||
|
result = 0;
|
||||||
|
goto lbl_exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
k70_in.p00 = 5;
|
||||||
|
k70_in.p04 = 0LL;
|
||||||
|
k70_in.p12 = 0;
|
||||||
|
k70_in.p16 = (unsigned) &bdvk;
|
||||||
|
k70_in.p20 = 0;
|
||||||
|
k70_in.p21 = filename_in;
|
||||||
|
|
||||||
|
result = kol_file_70(&k70_in); // get information about file
|
||||||
|
if ( 0 != result )
|
||||||
|
goto lbl_exit;
|
||||||
|
|
||||||
|
// count buffer size up to 1Mb, but no more than 1/2 of free memory
|
||||||
|
buf_size = 1 << 20; // 1Mb
|
||||||
|
while( ((buf_size >> 10) > kol_system_memfree()) && (buf_size > 4096) )
|
||||||
|
buf_size /= 2;
|
||||||
|
|
||||||
|
filesize = bdvk.p32; // getting file size (restriction - 4 GB only for FAT)
|
||||||
|
if (buf_size > filesize)
|
||||||
|
buf_size = (unsigned)filesize; // may be zero!
|
||||||
|
if (buf_size == 0) buf_size = 4096; // ...
|
||||||
|
|
||||||
|
buffer = (char*) malloc(buf_size);
|
||||||
|
if (!buffer)
|
||||||
|
{
|
||||||
|
result = E_NOMEM;
|
||||||
|
goto lbl_exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
k70_in.p00 = 0;
|
||||||
|
//k70_in.p08 = 0;
|
||||||
|
k70_in.p12 = buf_size;
|
||||||
|
k70_in.p16 = (unsigned) buffer;
|
||||||
|
k70_in.p20 = 0;
|
||||||
|
k70_in.p21 = filename_in;
|
||||||
|
|
||||||
|
k70_out.p00 = 2;
|
||||||
|
//k70_out.p08 = 0;
|
||||||
|
k70_out.p12 = buf_size;
|
||||||
|
k70_out.p16 = (unsigned) buffer;
|
||||||
|
k70_out.p20 = 0;
|
||||||
|
k70_out.p21 = filename_out;
|
||||||
|
|
||||||
|
unsigned long long offset = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
k70_in.p04 = offset;
|
||||||
|
if (offset + buf_size > filesize) // last chunk
|
||||||
|
{
|
||||||
|
k70_in.p12 = k70_out.p12 = (unsigned)(filesize - offset); // filesize % buf_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = kol_file_70(&k70_in); // read
|
||||||
|
if (result != 0)
|
||||||
|
{
|
||||||
|
goto lbl_exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
k70_out.p04 = offset;
|
||||||
|
result = kol_file_70(&k70_out); // write
|
||||||
|
if (result != 0)
|
||||||
|
{
|
||||||
|
goto lbl_exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (k70_out.p00 == 2)
|
||||||
|
{
|
||||||
|
k70_out.p00 = 3; // changing function from create (2) to append (3)
|
||||||
|
}
|
||||||
|
offset += buf_size;
|
||||||
|
} while (offset < filesize);
|
||||||
|
|
||||||
|
cmd_rm(filename_in); // remove source file
|
||||||
|
|
||||||
|
lbl_exit:
|
||||||
|
|
||||||
|
parameters_free(argc, argv);
|
||||||
|
free(filename_in);
|
||||||
|
free(filename_out);
|
||||||
|
free(buffer);
|
||||||
|
|
||||||
|
return (result == 0);
|
||||||
|
}
|
50
programs/system/shell/cmd/cmd_ren.c
Normal file
50
programs/system/shell/cmd/cmd_ren.c
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
|
||||||
|
int cmd_ren(char param[])
|
||||||
|
{
|
||||||
|
char* argv[100];
|
||||||
|
int argc;
|
||||||
|
/*
|
||||||
|
argv[0] - path (abs or rel) to file
|
||||||
|
argv[1] - new filename
|
||||||
|
*/
|
||||||
|
|
||||||
|
argc = parameters_prepare(param, argv);
|
||||||
|
if (argc != 2)
|
||||||
|
{
|
||||||
|
#if LANG_ENG
|
||||||
|
printf(" ren <file> <new_name>\n\r");
|
||||||
|
#elif LANG_RUS
|
||||||
|
printf(" ren <ä ©«> <®¢®¥_¨¬ï>\n\r");
|
||||||
|
#endif
|
||||||
|
parameters_free(argc, argv);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
char *x;
|
||||||
|
if (x = strrchr(argv[1], '/') != 0) // argv[1] must be file name, not path
|
||||||
|
{
|
||||||
|
//printf("%d %s", x, argv[1]);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *new_filename = (char*)malloc(FILENAME_MAX); new_filename[0] = '\0';
|
||||||
|
|
||||||
|
get_file_dir_loc(argv[0], new_filename);
|
||||||
|
if (strlen(new_filename) > 0)
|
||||||
|
{
|
||||||
|
strcat(new_filename, "/");
|
||||||
|
}
|
||||||
|
strcat(new_filename, argv[1]);
|
||||||
|
|
||||||
|
char *mv_params = (char*)malloc(FILENAME_MAX*2 + 1); mv_params[0] = '\0';
|
||||||
|
strcat(mv_params, argv[0]);
|
||||||
|
strcat(mv_params, " ");
|
||||||
|
strcat(mv_params, new_filename);
|
||||||
|
|
||||||
|
//printf("(%s)\n", mv_params);
|
||||||
|
int res = cmd_mv(mv_params);
|
||||||
|
|
||||||
|
free(new_filename);
|
||||||
|
free(mv_params);
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
#define SHELL_VERSION "0.7.8a"
|
#define SHELL_VERSION "0.7.9"
|
||||||
|
|
||||||
extern char PATH[256];
|
extern char PATH[256];
|
||||||
extern char PARAM[256];
|
extern char PARAM[256];
|
||||||
@ -67,6 +67,8 @@ int cmd_uptime(char param[]);
|
|||||||
int cmd_killall(char process_name[]);
|
int cmd_killall(char process_name[]);
|
||||||
int cmd_history(char arg[]);
|
int cmd_history(char arg[]);
|
||||||
int cmd_cp(char param[]);
|
int cmd_cp(char param[]);
|
||||||
|
int cmd_mv(char param[]);
|
||||||
|
int cmd_ren(char param[]);
|
||||||
int cmd_waitfor(char param[]);
|
int cmd_waitfor(char param[]);
|
||||||
|
|
||||||
/// ===========================================================
|
/// ===========================================================
|
||||||
|
@ -6,6 +6,8 @@ const command_t COMMANDS[]=
|
|||||||
{"cd", " Changes current directory. Usage:\n\r cd <directory name>\n\r", &cmd_cd},
|
{"cd", " Changes current directory. Usage:\n\r cd <directory name>\n\r", &cmd_cd},
|
||||||
{"clear", " Clears the screen\n\r", &cmd_clear},
|
{"clear", " Clears the screen\n\r", &cmd_clear},
|
||||||
{"cp", " Copies file\n\r", &cmd_cp},
|
{"cp", " Copies file\n\r", &cmd_cp},
|
||||||
|
{"mv", " Moves file\n\r", &cmd_mv},
|
||||||
|
{"ren", " Renames file\n\r", &cmd_ren},
|
||||||
{"date", " Returns the current date and time\n\r", &cmd_date},
|
{"date", " Returns the current date and time\n\r", &cmd_date},
|
||||||
{"echo", " Echoes the data to the screen. Usage:\n\r echo <data>\n\r", &cmd_echo},
|
{"echo", " Echoes the data to the screen. Usage:\n\r echo <data>\n\r", &cmd_echo},
|
||||||
{"exit", " Exits from Shell\n\r", &cmd_exit},
|
{"exit", " Exits from Shell\n\r", &cmd_exit},
|
||||||
|
@ -6,6 +6,8 @@ const command_t COMMANDS[]=
|
|||||||
{"cd", " ˆ§¬¥ï¥â ⥪ãéãî ¤¥à¨ªâ®à¨î. ˆá¯®«ì§®¢ ¨¥:\n\r cd <¤¨à¥ªâ®à¨ï>\n\r", &cmd_cd},
|
{"cd", " ˆ§¬¥ï¥â ⥪ãéãî ¤¥à¨ªâ®à¨î. ˆá¯®«ì§®¢ ¨¥:\n\r cd <¤¨à¥ªâ®à¨ï>\n\r", &cmd_cd},
|
||||||
{"clear", " Žç¨é ¥â íªà \n\r", &cmd_clear},
|
{"clear", " Žç¨é ¥â íªà \n\r", &cmd_clear},
|
||||||
{"cp", " Š®¯¨àã¥â ä ©«\n\r", &cmd_cp},
|
{"cp", " Š®¯¨àã¥â ä ©«\n\r", &cmd_cp},
|
||||||
|
{"mv", " <20>¥à¥¬¥é ¥â ä ©«\n\r", &cmd_mv},
|
||||||
|
{"ren", " <20>¥à¥¨¬¥®¢ë¢ ¥â ä ©«\n\r", &cmd_ren},
|
||||||
{"date", " <20>®ª §ë¢ ¥â ⥪ãéãî ¤ âã ¨ ¢à¥¬ï\n\r", &cmd_date},
|
{"date", " <20>®ª §ë¢ ¥â ⥪ãéãî ¤ âã ¨ ¢à¥¬ï\n\r", &cmd_date},
|
||||||
{"echo", " ‚뢮¤¨â ¤ ë¥ íªà . ˆá¯®«ì§®¢ ¨¥:\n\r echo <¤ ë¥>\n\r", &cmd_echo},
|
{"echo", " ‚뢮¤¨â ¤ ë¥ íªà . ˆá¯®«ì§®¢ ¨¥:\n\r echo <¤ ë¥>\n\r", &cmd_echo},
|
||||||
{"exit", " ‡ ¢¥à襨¥ à ¡®âë Shell\n\r", &cmd_exit},
|
{"exit", " ‡ ¢¥à襨¥ à ¡®âë Shell\n\r", &cmd_exit},
|
||||||
|
@ -41,6 +41,20 @@ for (;;i--)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/// ===========================================================
|
||||||
|
|
||||||
|
void get_file_dir_loc(char *filepath, char *dir_path)
|
||||||
|
{
|
||||||
|
char *res = strrchr(filepath, '/');
|
||||||
|
if (res == 0)
|
||||||
|
{
|
||||||
|
dir_path = '\0';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
size_t pos = res - filepath;
|
||||||
|
strncpy(dir_path, filepath, pos);
|
||||||
|
dir_path[pos] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
/// ===========================================================
|
/// ===========================================================
|
||||||
|
|
||||||
@ -160,7 +174,9 @@ command_execute();
|
|||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
|
//printf("\033[32;1m");
|
||||||
printf ("# ");
|
printf ("# ");
|
||||||
|
//printf("\033[0m");
|
||||||
command_get();
|
command_get();
|
||||||
command_execute();
|
command_execute();
|
||||||
}
|
}
|
||||||
|
@ -144,7 +144,7 @@ char* strchr(const char* string, int c)
|
|||||||
|
|
||||||
char* strrchr(const char* string, int c)
|
char* strrchr(const char* string, int c)
|
||||||
{
|
{
|
||||||
char* last_found;
|
char* last_found = 0; // !
|
||||||
while (*string)
|
while (*string)
|
||||||
{
|
{
|
||||||
if (*string==c)
|
if (*string==c)
|
||||||
|
Loading…
Reference in New Issue
Block a user