/programs/system/shell/cmd/cmd_cp.c |
---|
1,7 → 1,6 |
int cmd_cp(char param[]) |
{ |
char* argv[100]; |
int argc; |
char *filename_in = NULL; |
25,9 → 24,7 |
#elif LANG_RUS |
printf(" cp <¨áâ®ç¨ª> <१ã«ìâ â>\n\r"); |
#endif |
parameters_free(argc, argv); |
return TRUE; |
} |
38,22 → 35,24 |
{ |
strcpy(filename_in, cur_dir); |
if (filename_in[strlen(filename_in)-1] != '/') |
{ |
strcat(filename_in, "/"); // add slash |
} |
strcat(filename_in, argv[0]); |
} |
else |
} 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 |
} else |
{ |
strcpy(filename_out, argv[1]); |
} |
63,7 → 62,9 |
{ |
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); |
} |
75,7 → 76,7 |
k70_in.p20 = 0; |
k70_in.p21 = filename_in; |
result = kol_file_70(&k70_in); // ¯®«ãç ¥¬ ¨ä®à¬ æ¨î ® ä ©«¥ |
result = kol_file_70(&k70_in); // get information about file |
if ( 0 != result ) |
goto lbl_exit; |
84,7 → 85,7 |
while( ((buf_size >> 10) > kol_system_memfree()) && (buf_size > 4096) ) |
buf_size /= 2; |
filesize = bdvk.p32; // ¯®«ãç ¥¬ à §¬¥à ä ©« (®£à ¨ç¥¨¥ - 4 ¡ ©â ⮫쪮 ¤«ï FAT) |
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; // ... |
111,7 → 112,8 |
k70_out.p21 = filename_out; |
unsigned long long offset = 0; |
do { |
do |
{ |
k70_in.p04 = offset; |
if (offset + buf_size > filesize) // last chunk |
{ |
118,17 → 120,23 |
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) |
{ |
goto lbl_exit; |
} |
k70_out.p04 = offset; |
result = kol_file_70(&k70_out); // § ¯¨áì |
result = kol_file_70(&k70_out); // write |
if (result != 0) |
{ |
goto lbl_exit; |
} |
if (k70_out.p00 == 2) |
k70_out.p00 = 3; // ¬¥ï¥¬ äãªæ¨î á ᮧ¤ ¨ï (2) ¤®§ ¯¨áì (3) |
{ |
k70_out.p00 = 3; // changing function from create (2) to append (3) |
} |
offset += buf_size; |
} while (offset < filesize); |
/programs/system/shell/cmd/cmd_ls.c |
---|
8,6 → 8,7 |
unsigned *t; |
unsigned type_of_file; // check is this a file or a folder |
int i, result; |
char tmp[FILENAME_MAX]; |
bool single_column_mode = FALSE; |
26,10 → 27,24 |
dir += 3; |
} |
if ( !strlen(dir) ) |
if ( !strlen(dir) ) // if argument is empty, list current directory |
k70.p21 = cur_dir; |
else |
{ |
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); |
if ( !((result==0) || (result==6)) ) // check does the directory exists |
/programs/system/shell/cmd/cmd_mv.c |
---|
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); |
} |
/programs/system/shell/cmd/cmd_ren.c |
---|
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; |
} |