SHELL 0.8.2

- big refactoring, now uses libc.obj
- added kfetch command

git-svn-id: svn://kolibrios.org@8827 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Rustem Gimadutdinov (rgimad)
2021-06-12 21:34:41 +00:00
parent 112c948922
commit 68cf3e4293
59 changed files with 1617 additions and 2317 deletions

View File

@@ -1,10 +1,6 @@
int cmd_about(char param[])
{
char message[] = {"Shell %s\n\r"};
printf(message, SHELL_VERSION);
return TRUE;
int cmd_about(char param[]) {
printf(CMD_ABOUT_MSG, SHELL_VERSION);
return TRUE;
}

View File

@@ -1,20 +1,17 @@
int cmd_alias(char arg[])
{
int cmd_alias(char arg[]) {
int result;
int result;
if (NULL == arg || '\0' == arg[0])
{
alias_list();
return TRUE;
if (NULL == arg || '\0' == arg[0]) {
alias_list();
return TRUE;
}
result = alias_check(arg);
result = alias_check(arg);
if ( ( 0 != result ) && ( -1 != result ) )
alias_add(arg);
if ( ( 0 != result ) && ( -1 != result ) )
alias_add(arg);
return TRUE;
return TRUE;
}

View File

@@ -1,58 +1,47 @@
int cmd_cd(char dir[])
{
char temp[256];
unsigned result;
char temp[256];
unsigned result;
if (NULL == dir)
{
#if LANG_ENG
printf(" cd <directory>\n\r");
#elif LANG_RUS
printf(" cd <¤¨ŕĽŞâŽŕ¨ď>\n\r");
#endif
return TRUE;
}
if ( 0 == strcmp(dir, ".") || 0 == strcmp(dir, "./") )
return TRUE;
if ( ( 0 == strcmp(dir, "..") || 0 == strcmp(dir, "../") ) && ( 0 != strcmp(cur_dir, "/")) )
{
cur_dir[strlen(cur_dir)-1]='\0';
dir_truncate(cur_dir);
set_cwd(cur_dir);
return TRUE;
}
if ( '/' == dir[0])
{
if ( dir_check(dir) )
{
strcpy(cur_dir, dir);
set_cwd(cur_dir);
if (NULL == dir) {
printf(CMD_CD_USAGE);
return TRUE;
}
return FALSE;
}
else
{
strcpy(temp, cur_dir);
if (cur_dir[strlen(cur_dir)-1] != '/')
strcat(temp, "/");
strcat(temp, dir);
if ( dir_check(temp) )
{
strcpy(cur_dir, temp);
set_cwd(cur_dir);
if ( 0 == strcmp(dir, ".") || 0 == strcmp(dir, "./") )
return TRUE;
if ( ( 0 == strcmp(dir, "..") || 0 == strcmp(dir, "../") ) && ( 0 != strcmp(cur_dir, "/")) ) {
cur_dir[strlen(cur_dir)-1]='\0';
dir_truncate(cur_dir);
set_cwd(cur_dir);
return TRUE;
}
if ( '/' == dir[0]) {
if ( dir_check(dir) )
{
strcpy(cur_dir, dir);
set_cwd(cur_dir);
return TRUE;
}
return FALSE;
}
else {
strcpy(temp, cur_dir);
if (cur_dir[strlen(cur_dir)-1] != '/')
strcat(temp, "/");
strcat(temp, dir);
if ( dir_check(temp) ) {
strcpy(cur_dir, temp);
set_cwd(cur_dir);
return TRUE;
}
return FALSE;
return FALSE;
}
}

View File

@@ -1,7 +1,6 @@
int cmd_clear(char param[])
{
con_cls();
return TRUE;
int cmd_clear(char param[]) {
con_cls();
return TRUE;
}

View File

@@ -19,11 +19,7 @@ int cmd_cp(char param[])
if (argc != 2)
{
#if LANG_ENG
printf(" cp <file_in> <file_out>\n\r");
#elif LANG_RUS
printf(" cp <¨áâ®ç­¨ª> <१ã«ìâ â>\n\r");
#endif
printf(CMD_CP_USAGE);
parameters_free(argc, argv);
return TRUE;
}

View File

@@ -1,32 +1,22 @@
int cmd_date(char param[])
{
unsigned date;
unsigned time;
unsigned date;
unsigned time;
date = kol_system_date_get();
#if LANG_ENG
printf(" Date [dd.mm.yy]: %x%x.%x%x.%x%x",
#elif LANG_RUS
printf(" „ â  [¤¤.¬¬.££]: %x%x.%x%x.%x%x",
#endif
(date&0xf00000)>>20, (date&0xf0000)>>16, // day
(date&0xf000)>>12, (date&0xf00)>>8, //month
(date&0xf0)>>4, (date&0xf) ); // year
date = kol_system_date_get();
printf(CMD_DATE_DATE_FMT,
(date&0xf00000)>>20, (date&0xf0000)>>16, // day
(date&0xf000)>>12, (date&0xf00)>>8, //month
(date&0xf0)>>4, (date&0xf) ); // year
time = kol_system_time_get();
time = kol_system_time_get();
printf(CMD_DATE_TIME_FMT,
(time&0xf0)>>4, (time&0xf), // hours
(time&0xf000)>>12, (time&0xf00)>>8, // minutes
(time&0xf00000)>>20, (time&0xf0000)>>16 ); // seconds
#if LANG_ENG
printf("\n\r Time [hh:mm:ss]: %x%x:%x%x:%x%x\n\r",
#elif LANG_RUS
printf("\n\r ‚६ï [çç:¬¬:áá]: %x%x:%x%x:%x%x\n\r",
#endif
(time&0xf0)>>4, (time&0xf), // hours
(time&0xf000)>>12, (time&0xf00)>>8, // minutes
(time&0xf00000)>>20, (time&0xf0000)>>16 ); // seconds
return TRUE;
return TRUE;
}

View File

@@ -1,9 +1,9 @@
int cmd_exit(char param[])
{
free(ALIASES);
_exit(1);
kol_exit();
return TRUE;
free(ALIASES);
con_exit(1);
kol_exit();
return TRUE;
}

View File

@@ -1,19 +1,15 @@
int cmd_memory(char param[])
{
unsigned total, free, used;
unsigned total, free, used;
total = kol_system_mem();
free = kol_system_memfree();
used = total - free;
total = kol_system_mem();
free = kol_system_memfree();
used = total - free;
#if LANG_ENG
printf (" Total [kB / MB / %%]: %-7d / %-5d / 100\n\r Free [kB / MB / %%]: %-7d / %-5d / %d\n\r Used [kB / MB / %%]: %-7d / %-5d / %d\n\r",
#elif LANG_RUS
printf (" ‚ᥣ® [Š<> / Œ<> / %%]: %-7d / %-5d / 100\n\r ‘¢®¡®¤­® [Š<> / Œ<> / %%]: %-7d / %-5d / %d\n\r ˆá¯®«ì§ã¥âáï [Š<> / Œ<> / %%]: %-7d / %-5d / %d\n\r",
#endif
printf (CMD_FREE_FMT,
total, total/1024, free, free/1024, (free*100)/total, used, total/1024-free/1024, 100-(free*100)/total );
return TRUE;
return TRUE;
}

View File

@@ -1,46 +1,30 @@
int cmd_help(char cmd[])
{
int cmd_help(char cmd[]) {
int i;
int i;
#if LANG_ENG
char available[]={" %d commands available:\n\r"};
#elif LANG_RUS
char available[]={" Š®«¨ç¥á⢮ ¤®áâ㯭ëå ª®¬ ­¤: %d\n\r"};
#endif
if ( !strlen(cmd) )
{
int columns_max=3;
printf (available, NUM_OF_CMD);
for (i = 0; i < NUM_OF_CMD; i++)
{
printf(" %-12s", COMMANDS[i].name);
if ((i) && ((i+1)%columns_max == 0)) printf("\n\r");
if ( !strlen(cmd) ) {
int columns_max=3;
printf (CMD_HELP_AVAIL, NUM_OF_CMD);
for (i = 0; i < NUM_OF_CMD; i++) {
printf(" %-12s", COMMANDS[i].name);
if ((i) && ((i+1)%columns_max == 0)) printf("\n\r");
}
if ((i)%columns_max != 0) printf("\n\r");
return TRUE;
}
if ((i)%columns_max != 0) printf("\n\r");
return TRUE;
}
else
{
for (i=0; i<NUM_OF_CMD; i++)
if ( !strcmp(cmd, COMMANDS[i].name) )
{
printf(COMMANDS[i].help);
return TRUE;
else {
for (i=0; i<NUM_OF_CMD; i++)
if ( !strcmp(cmd, COMMANDS[i].name) ) {
printf(COMMANDS[i].help);
return TRUE;
}
#if LANG_ENG
printf (" Command \'%s\' not found.\n\r", cmd);
#elif LANG_RUS
printf (" Š®¬ ­¤  \'%s\' ­¥ ­ ©¤¥­ .\n\r", cmd);
#endif
printf (available, NUM_OF_CMD);
for (i = 0; i < NUM_OF_CMD; i++)
printf(" %s\n\r", COMMANDS[i].name);
}
printf (CMD_HELP_CMD_NOT_FOUND, cmd);
printf (CMD_HELP_AVAIL, NUM_OF_CMD);
for (i = 0; i < NUM_OF_CMD; i++)
printf(" %s\n\r", COMMANDS[i].name);
}
return FALSE;
return FALSE;
}

View File

@@ -1,14 +1,9 @@
int cmd_history(char arg[])
{
int i;
for (i = CMD_HISTORY_NUM_REAL - 1; i >= 0; i--)
{
printf("%s\n", CMD_HISTORY[i]);
int cmd_history(char arg[]) {
int i;
for (i = CMD_HISTORY_NUM_REAL - 1; i >= 0; i--) {
printf("%s\n", CMD_HISTORY[i]);
}
return TRUE;
return TRUE;
}

View File

@@ -1,106 +0,0 @@
/* turbocat2001 */
#if LANG_ENG
#define HELP "info <object_name>\n"
#define FILE_NOT_FOUND "Object '%s' not found!\n"
#define OBJECT_INFO "Object '%s' information:\n\n"
#define TYPE "Type: "
#define DIR "'Folder'"
#define PART "'Part'"
#define FILE "'File'"
#define CREATED "Created: %02d.%02d.%02d %02d:%02d:%02d\n"
#define MODIFID "Modified: %02d.%02d.%02d %02d:%02d:%02d\n"
#define DATE_TIME " Date Time\n"
#define ATTRIB "Attributes: "
#define RO "'Read only' "
#define HIDDEN "'Hidden' "
#define SYS "'System' "
#define NOT_ARCHIV "'Not archived' "
#define FILE_SIZE "\nFile size: %u KB (%u B)\n"
#elif LANG_RUS
#define HELP "info <¨¬ï_®¡ê¥ªâ >\n"
#define FILE_NOT_FOUND "Ž¡ê¥ªâ '%s' ­¥ ­ ©¤¥­!\n"
#define OBJECT_INFO "ˆ­ä®à¬ æ¨ï ®¡ ®¡ê¥ªâ¥ '%s':\n\n"
#define TYPE "’¨¯: "
#define DIR "'<27> ¯ª '"
#define PART "'’®¬'"
#define FILE "'” ©«'"
#define CREATED "‘®§¤ ­: %02d.%02d.%02d %02d:%02d:%02d\n"
#define MODIFID "ˆ§¬¥­ñ­: %02d.%02d.%02d %02d:%02d:%02d\n"
#define DATE_TIME " „ â  ‚६ï\n"
#define ATTRIB "€âਡãâë: "
#define RO "'’®«ìª® ¤«ï ç⥭¨ï' "
#define HIDDEN "'‘ªàëâë©' "
#define SYS "'‘¨á⥬­ë©' "
#define NOT_ARCHIV "'<27>¥  à娢­ë©' "
#define FILE_SIZE "\n<> §¬¥à ä ©« : %u K<> (%u <20>)\n"
#endif
int cmd_info(char param[])
{
byte is_dir=0, is_part=0; // Folder or part?
char* argv[100];
if(1 != parameters_prepare(param, argv)) //get number of parameters
{
printf(HELP);
return TRUE;
}
FS_struct_BDVK *info=NULL; // BDVK struct define
info=get_bdvk(argv[0]); // Get file info (BDVK)
if(info==NULL)
{
printf(FILE_NOT_FOUND, argv[0]);
return TRUE;
}
printf(OBJECT_INFO, argv[0]);
printf(TYPE);
if (info->attrib & (1 << 4))
{
printf(DIR);
is_dir=1;
}
else if (info->attrib & (1 << 3))
{
printf(PART);
is_part=1;
}
else
{
printf(FILE);
}
printf("\n\n");
printf(DATE_TIME); // Show date and time
printf(CREATED, info->c_date.d, info->c_date.m, info->c_date.y, info->c_time.h, info->c_time.m, info->c_time.s);
printf(MODIFID, info->m_date.d, info->m_date.m, info->m_date.y, info->m_time.h, info->m_time.m, info->m_time.s);
printf("\n");
printf(ATTRIB); // Show Attributes
if (info->attrib & (1 << 0))
{
printf(RO);
}
if (info->attrib & (1 << 1))
{
printf(HIDDEN);
}
if (info->attrib & (1 << 2))
{
printf(SYS);
}
if (info->attrib & (1 << 5))
{
printf(NOT_ARCHIV);
}
printf("\n");
if (!is_dir && (info->size)>=0 && !is_part) // If dir or part then not show file size
{
printf(FILE_SIZE, info->size/1024, info->size);
}
return TRUE;
}

View File

@@ -0,0 +1,53 @@
void get_str_meminfo(char *str) {
unsigned mem_all_mib = kol_system_mem() / 1024;
unsigned mem_free_mib = kol_system_memfree() / 1024;
sprintf(str, "%uMiB / %uMiB", mem_all_mib - mem_free_mib, mem_all_mib);
}
int cmd_kfetch(char param[]) {
char *str_krnl_ver = malloc(64);
get_str_kernel_version(str_krnl_ver, "%d.%d.%d.%d. SVN-rev.: %d");
char *str_uptime = malloc(64);
get_str_uptime(str_uptime, "%d day(s), %d:%d:%d.%d");
char *str_resolution = malloc(24);
ksys_pos_t resol = _ksys_screen_size();
sprintf(str_resolution, "%u x %u", resol.x + 1, resol.y + 1);
char *str_cpu_info = malloc(16);
get_str_cpu_info(str_cpu_info);
char *str_meminfo = malloc(24);
get_str_meminfo(str_meminfo);
printf(/*"\033[0;34;40m \033[0m\n\r"*/
/*"\033[0;34;40m \033[0m\n\r"*/
/*"\033[0;34;40m \033[0m\n\r"*/
"\033[0;34;40m .\033[0;31;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m t\033[0;1;30;40m@\033[0;34;40m.\033[0;31;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m ;8\033[0;1;30;40m8\033[0;34;40m8\033[0;1;30;40m8\033[0;32;40m.\033[0;34;40m.\033[0;32;40m \033[0;34;40m \033[0;31;40m.\033[0;34;40mS\033[0;1;30;46m88\033[0;1;35;47m8\033[0;35;44mX\033[0;34;40m;\033[0;32;40m.:\033[0;5;30;40mX\033[0;1;30;46mX8\033[0;34;40m8\033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m t\033[0;5;36;40m8\033[0;5;36;46m@ \033[0;5;37;46m%%\033[0;5;37;47m.\033[0;5;37;46m@\033[0;34;46m8\033[0;31;40mt\033[0;34;40m.\033[0;32;40m.\033[0;34;40m \033[0;31;40m \033[0;1;30;40m8\033[0;1;36;46m%%\033[0;5;37;46m8\033[0;5;1;35;44m8\033[0;1;34;45m8\033[0;30;44m8\033[0;32;40m;;\033[0;5;36;40m8\033[0;37;46m@\033[0;5;37;44m8\033[0;5;35;44m:\033[0;1;30;45m8\033[0;5;34;40m8\033[0m\n\r"
"\033[0;34;40m@\033[0;5;35;40m8\033[0;1;30;44m8\033[0;5;35;40m8\033[0;35;44m8\033[0;1;30;45m@\033[0;35;44m8\033[0;1;30;45m8\033[0;34;45m8\033[0;1;30;45m8\033[0;1;34;45m8\033[0;1;37;47mt\033[0;5;37;46m@\033[0;1;30;46m8S\033[0;5;37;46m8X\033[0;5;36;46m.t\033[0;1;30;44m8\033[0;31;40m \033[0;32;40m \033[0;34;40m:\033[0;5;36;40m8\033[0;1;30;46m@\033[0;1;34;47m8\033[0;5;37;45m8\033[0;5;35;44m \033[0;1;30;45m8\033[0;1;30;46m88\033[0;36;47m@\033[0;5;37;44m8\033[0;5;35;44m \033[0;5;35;45m;\033[0;5;35;44m.\033[0;37;45m8\033[0;1;30;44mX\033[0;32;40m \033[0m %s\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;32;40m \033[0;34;40m.\033[0;32;40m.\033[0;34;40m;S@\033[0;5;30;40m8\033[0;33;41m8\033[0;1;33;43m;\033[0;5;33;43m \033[0;1;33;47m8\033[0;5;33;43m \033[0;1;33;43mt\033[0;36;47m8\033[0;5;36;46m \033[0;1;36;46m%%\033[0;5;34;40m8\033[0;1;30;46m%%8\033[0;5;37;46mX\033[0;5;36;46m%%\033[0;5;35;45m.\033[0;5;36;44m.\033[0;37;46m8\033[0;1;34;47m@\033[0;1;36;47mX\033[0;5;1;35;44m8\033[0;5;37;44m8\033[0;5;1;34;45m8\033[0;1;35;45m:\033[0;1;34;47m8\033[0;1;30;45m8\033[0;5;34;40m8\033[0;31;40m: \033[0m %s%s\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m.::\033[0;34;40m.\033[0;31;40m;\033[0;1;30;43m8\033[0;5;1;33;41m8\033[0;5;33;43m \033[0;5;33;41m \033[0;5;37;43mX\033[0;5;36;46m8:\033[0;1;36;46mS.\033[0;5;36;46m;@\033[0;1;34;45m88\033[0;1;34;46m8\033[0;1;37;47m.\033[0;5;1;34;45m8\033[0;5;37;45m8\033[0;5;1;34;45m8\033[0;1;35;47m8\033[0;5;1;35;44m8\033[0;5;35;44m \033[0;35;47m8\033[0;35;44m%%\033[0;34;40m;. \033[0;31;40m \033[0m %s%s\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;32;40m \033[0;34;40m .\033[0;31;40m;\033[0;1;30;41m@\033[0;5;31;41mS\033[0;5;33;41m \033[0;5;1;31;43m8\033[0;1;30;43m8\033[0;5;36;46m88\033[0;5;37;46mX\033[0;1;36;47m@\033[0;1;36;46mS\033[0;1;34;47m@\033[0;1;35;47m@\033[0;5;37;44m8\033[0;5;1;34;45m8\033[0;5;35;44m;\033[0;1;34;45m8\033[0;5;35;44m;\033[0;35;47m8\033[0;5;1;35;44m8\033[0;1;30;45m8\033[0;5;35;40m8\033[0;34;40m%%\033[0;32;40m \033[0;34;40m \033[0;31;40m \033[0m %s%s\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m:\033[0;5;33;40mS\033[0;1;32;46m8\033[0;37;43mS\033[0;1;32;47m8\033[0;37;46mS\033[0;5;37;42m8\033[0;5;36;46mX\033[0;36;47m8\033[0;1;30;46m8\033[0;5;35;44mX\033[0;1;34;45m88\033[0;1;30;45m8\033[0;37;45m@\033[0;1;34;45m8\033[0;1;30;45m8\033[0;1;30;44m@\033[0;34;40m8\033[0;32;40m%%\033[0;34;40m; \033[0;32;40m \033[0;34;40m \033[0;31;40m \033[0m %s%s\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m .\033[0;32;40m.@\033[0;1;36;46m%%\033[0;5;36;42m;\033[0;1;33;47mX\033[0;5;37;46m8\033[0;5;37;42m8\033[0;5;33;43m \033[0;5;36;46m8\033[0;1;34;46m8\033[0;1;30;45m8\033[0;34;45m8\033[0;1;30;45m8\033[0;5;34;44m.\033[0;1;30;45m8\033[0;5;34;40m@\033[0;34;40mS:\033[0;32;40m;\033[0;34;40m: \033[0;32;40m \033[0m %s%s\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m \033[0;34;40m.\033[0;31;40m;\033[0;5;36;40m8\033[0;1;36;46mt\033[0;5;36;42m.\033[0;1;33;47m@\033[0;5;36;42m \033[0;1;36;46m@X\033[0;5;36;46mX\033[0;1;36;46mS\033[0;1;30;46mX\033[0;5;34;44m8\033[0;5;35;40m;\033[0;1;30;44mS\033[0;34;40m \033[0;32;40m.\033[0;34;40m.\033[0;31;40m \033[0;34;40m \033[0;32;40m \033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m .\033[0;1;30;40mX\033[0;1;30;46m@\033[0;1;36;46m%%\033[0;5;36;42mt\033[0;5;37;43m@\033[0;1;32;47m8\033[0;5;36;46m;\033[0;1;36;46m%%S\033[0;1;30;46m@t\033[0;5;36;40m8\033[0;34;40m. \033[0;31;40m \033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m :;\033[0;5;32;40m8\033[0;1;30;46mS\033[0;32;46m8\033[0;5;32;42m.\033[0;1;32;43m8\033[0;5;37;42m88\033[0;1;36;46mX\033[0;1;30;46m.\033[0;5;36;40mX\033[0;30;44m8\033[0;31;40m:\033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m \033[0;31;40m \033[0;34;40m \033[0;32;40m;\033[0;5;32;40m8\033[0;5;36;40m8\033[0;32;46m8\033[0;5;36;40mt \033[0;1;30;46m8\033[0;5;35;44m8\033[0;37;45m@\033[0;5;35;44m%%\033[0;5;35;40m8\033[0;32;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m \033[0;31;40m \033[0;34;40m .\033[0;31;40m \033[0;5;34;40mX\033[0;1;30;45m8\033[0;34;45m8\033[0;1;30;45m8\033[0;5;34;44m8\033[0;1;30;45m8\033[0;1;35;47m8\033[0;5;36;44m8\033[0;1;30;40m8\033[0;31;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;31;40m \033[0;30;44m8\033[0;1;34;45m88\033[0;1;30;45m8\033[0;5;35;44m%%\033[0;1;34;45m8\033[0;5;35;44m;\033[0;5;37;45m8\033[0;34;45m@\033[0;34;40m@\033[0;32;40m.\033[0;31;40m.\033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;31;40m :\033[0;5;35;40m8\033[0;1;34;45m8\033[0;1;30;45m8\033[0;5;35;44m%%\033[0;37;45m@\033[0;5;35;44m:\033[0;5;35;45mS\033[0;5;35;44m%%\033[0;35;47m8\033[0;1;30;44m8\033[0;31;40m.\033[0;34;40m.\033[0;32;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;34;40m \033[0;30;44m8\033[0;1;34;45m888\033[0;5;37;45m@\033[0;35;47m8\033[0;5;35;44mt\033[0;35;47m8\033[0;5;35;44mt\033[0;5;35;45m;\033[0;30;44m8\033[0;32;40m;\033[0;31;40m \033[0;32;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;34;40m \033[0;31;40m.\033[0;1;30;40m8\033[0;5;37;45m@\033[0;5;35;44m:\033[0;1;30;45m8\033[0;5;34;44m \033[0;5;35;45m \033[0;1;34;44m8\033[0;1;35;45m.\033[0;5;34;40mX\033[0;34;40m@\033[0;32;40mS\033[0;31;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;34;40m \033[0;31;40m \033[0;34;40m.;\033[0;1;30;40m8\033[0;1;30;44m8\033[0;34;40m8\033[0;5;34;40m8\033[0;32;40m%%\033[0;34;40m8;\033[0;32;40m;\033[0;31;40m.\033[0;32;40m \033[0;31;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;34;40m \033[0;32;40m .\033[0;31;40m .:\033[0;32;40m.\033[0;31;40m.\033[0;32;40m.\033[0;31;40m.\033[0;32;40m.\033[0;31;40m \033[0;32;40m \033[0;34;40m \033[0m\n\r",
"\033[0;36mOS\033[0m: KolibriOS", "\033[0;36mKernel\033[0m: ", str_krnl_ver, "\033[0;36mUptime\033[0m: ", str_uptime, "\033[0;36mResolution\033[0m: ", str_resolution, "\033[0;36mCPU\033[0m: ", str_cpu_info, "\033[0;36mMemory\033[0m: ", str_meminfo);
free(str_krnl_ver);
free(str_uptime);
free(str_resolution);
free(str_cpu_info);
free(str_meminfo);
return TRUE;
}

View File

@@ -1,36 +1,29 @@
int cmd_kill(char param[])
{
unsigned process;
int result;
int i;
unsigned process;
int result;
int i;
if ( strlen(param) == 0 )
{
printf(" kill <PID>\n\r");
return TRUE;
if ( strlen(param) == 0 ) {
printf(CMD_KILL_USAGE);
return TRUE;
}
if (!strcmp(param, "all"))
{
for (i = 2;i<256;i++)
{
kol_kill_process(i);
if (!strcmp(param, "all")) {
for (i = 2;i<256;i++) {
kol_kill_process(i);
}
return TRUE;
}
else
{
process = _atoi(param);
if ( 0 != process )
{
result = kol_process_kill_pid(process);
if (result < 0)
return FALSE;
else
return TRUE;
return TRUE;
}
else {
process = atoi(param);
if ( 0 != process ) {
result = kol_process_kill_pid(process);
if (result < 0)
return FALSE;
else
return TRUE;
}
}

View File

@@ -1,127 +1,126 @@
int cmd_ls(char dir[])
{
int cmd_ls(char dir[]) {
kol_struct70 k70;
unsigned *n;
unsigned num_of_file; // number of files in directory
unsigned *t;
unsigned type_of_file; // check is this a file or a folder
int i, result;
char tmp[FILENAME_MAX];
kol_struct70 k70;
unsigned *n;
unsigned num_of_file; // number of files in directory
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;
bool single_column_mode = FALSE;
k70.p00 = 1;
k70.p04 = 0;
//k70.p08 = 0;
k70.p12 = 2; // just for test exist & read number of entries
k70.p16 = (unsigned) malloc(32+k70.p12*560);
k70.p20 = 0;
k70.p00 = 1;
k70.p04 = 0;
//k70.p08 = 0;
k70.p12 = 2; // just for test exist & read number of entries
k70.p16 = (unsigned) malloc(32+k70.p12*560);
k70.p20 = 0;
if (!strnicmp(dir,"-1",1))
{
single_column_mode = TRUE;
dir += 3;
}
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
{
free( (void*) k70.p16);
return FALSE;
}
n = (unsigned*) (k70.p16+8);
num_of_file = *n;
// now read full directory
k70.p12 = num_of_file;
free( (void*) k70.p16);
k70.p16 = (unsigned) malloc(32+k70.p12*560);
if ( !k70.p16 )
return FALSE;
result = kol_file_70(&k70);
if ( !((result==0) || (result==6)) )
{
free( (void*) k70.p16);
return FALSE;
}
// if there was '-1' param, then show single column mode
// otherwise show files in several columns
if (single_column_mode == TRUE)
{
_SINGLE_COLUMN_MODE:
for (i = 0; i < num_of_file; i++)
{
printf (" %s", k70.p16+32+40+(264+40)*i);
t = (unsigned*) (k70.p16+32+(264+40)*i);
type_of_file = *t;
if ( (0x10 == (type_of_file&0x10)) || (8 == (type_of_file&8)) )
printf ("/");
printf ("\n\r");
}
}
else
{
int longest_name_len = 0;
int console_window_width = 78; //need to get this value from console.obj if it's possible
for (i = 0; i < num_of_file; i++)
if (!strnicmp(dir,"-1",1))
{
int current_name_len;
current_name_len = strlen( (char*)k70.p16+32+40+(264+40)*i);
if (current_name_len > longest_name_len) longest_name_len = current_name_len;
single_column_mode = TRUE;
dir += 3;
}
longest_name_len+=2; //consider space separator and '/' symbol for folders
int columns_max = console_window_width / longest_name_len;
if (longest_name_len >= console_window_width) goto _SINGLE_COLUMN_MODE; //there was too long filename
for (i = 0; i < num_of_file; i++)
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
{
char cur_file[2048];
strncpy(cur_file, (char*)k70.p16+32+40+(304)*i, sizeof(cur_file)-2);
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;
}
}
t = (unsigned*) (k70.p16+32+(304)*i);
result = kol_file_70(&k70);
if ( !((result==0) || (result==6)) ) // check does the directory exists
{
free( (void*) k70.p16);
return FALSE;
}
n = (unsigned*) (k70.p16+8);
num_of_file = *n;
// now read full directory
k70.p12 = num_of_file;
free( (void*) k70.p16);
k70.p16 = (unsigned) malloc(32+k70.p12*560);
if ( !k70.p16 )
return FALSE;
result = kol_file_70(&k70);
if ( !((result==0) || (result==6)) )
{
free( (void*) k70.p16);
return FALSE;
}
// if there was '-1' param, then show single column mode
// otherwise show files in several columns
if (single_column_mode == TRUE)
{
_SINGLE_COLUMN_MODE:
for (i = 0; i < num_of_file; i++)
{
printf (" %s", k70.p16+32+40+(264+40)*i);
t = (unsigned*) (k70.p16+32+(264+40)*i);
type_of_file = *t;
int is_folder = 0;
if ( (0x10 == (type_of_file&0x10)) || (8 == (type_of_file&8)) ) { is_folder = 1; strcat(cur_file, "/"); }
if ( (0x10 == (type_of_file&0x10)) || (8 == (type_of_file&8)) )
printf ("/");
printf ("\n\r");
}
}
else
{
int longest_name_len = 0;
int console_window_width = 78; //need to get this value from console.obj if it's possible
for (i = 0; i < num_of_file; i++)
{
int current_name_len;
current_name_len = strlen( (char*)k70.p16+32+40+(264+40)*i);
if (current_name_len > longest_name_len) longest_name_len = current_name_len;
}
if (is_folder) { printf("\033[0;36m"); } // set cyan for folder
printf ("%*s", -longest_name_len, cur_file);
if (is_folder) { printf("\033[0m"); } // is had been set, reset
longest_name_len+=2; //consider space separator and '/' symbol for folders
int columns_max = console_window_width / longest_name_len;
if ((i>0) && ((i+1)%columns_max == 0)) printf ("\n\r");
}
if ((i)%columns_max != 0) printf("\n\r");
}
free((void*)k70.p16);
return TRUE;
if (longest_name_len >= console_window_width) goto _SINGLE_COLUMN_MODE; //there was too long filename
for (i = 0; i < num_of_file; i++)
{
char cur_file[2048];
strncpy(cur_file, (char*)k70.p16+32+40+(304)*i, sizeof(cur_file)-2);
t = (unsigned*) (k70.p16+32+(304)*i);
type_of_file = *t;
int is_folder = 0;
if ( (0x10 == (type_of_file&0x10)) || (8 == (type_of_file&8)) ) { is_folder = 1; strcat(cur_file, "/"); }
if (is_folder) { printf("\033[0;36m"); } // set cyan for folder
printf ("%*s", -longest_name_len, cur_file);
if (is_folder) { printf("\033[0m"); } // is had been set, reset
if ((i>0) && ((i+1)%columns_max == 0)) printf ("\n\r");
}
if ((i)%columns_max != 0) printf("\n\r");
}
free((void*)k70.p16);
return TRUE;
}

View File

@@ -1,51 +1,41 @@
int cmd_mkdir(char dir[])
{
int cmd_mkdir(char dir[]) {
char temp[FILENAME_MAX];
kol_struct70 k70;
unsigned result;
char temp[FILENAME_MAX];
kol_struct70 k70;
unsigned result;
if (NULL == dir)
{
#if LANG_ENG
printf(" mkdir <directory>\n\r");
#elif LANG_RUS
printf(" mkdir <¤¨à¥ªâ®à¨ï>\n\r");
#endif
return TRUE;
if (NULL == dir) {
printf(CMD_MKDIR_USAGE);
return TRUE;
}
if ( 0 == strcmp(dir, ".") || ( 0 == strcmp(dir, "..") ) || ( 0 == strcmp(cur_dir, "/")) )
{
return FALSE;
if ( 0 == strcmp(dir, ".") || ( 0 == strcmp(dir, "..") ) || ( 0 == strcmp(cur_dir, "/")) ) {
return FALSE;
}
k70.p00 = 9;
k70.p04 = 0;
//k70.p08 = 0;
k70.p12 = 0;
k70.p16 = 0;
k70.p20 = 0;
k70.p00 = 9;
k70.p04 = 0;
//k70.p08 = 0;
k70.p12 = 0;
k70.p16 = 0;
k70.p20 = 0;
if ( '/' == dir[0])
k70.p21 = dir;
else
{
strcpy(temp, cur_dir);
if (temp[strlen(temp)-1] != '/')
strcat(temp, "/"); // add slash
strcat(temp, dir);
k70.p21 = temp;
if ( '/' == dir[0])
k70.p21 = dir;
else {
strcpy(temp, cur_dir);
if (temp[strlen(temp)-1] != '/')
strcat(temp, "/"); // add slash
strcat(temp, dir);
k70.p21 = temp;
}
result = kol_file_70(&k70);
result = kol_file_70(&k70);
if (0 == result)
return TRUE;
else
return FALSE;
if (0 == result)
return TRUE;
else
return FALSE;
}

View File

@@ -1,98 +1,92 @@
int cmd_more(char file[])
{
int cmd_more(char file[]) {
kol_struct70 k70;
kol_struct_BDVK bdvk;
unsigned result, i;
unsigned long long filesize, pos;
char buf[81]; //¡ãä¥à
char temp[FILENAME_MAX];
unsigned flags;
kol_struct70 k70;
kol_struct_BDVK bdvk;
unsigned result, i;
unsigned long long filesize, pos;
char buf[81]; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char temp[FILENAME_MAX];
unsigned flags;
if (strlen(file)<1)
{
#if LANG_ENG
printf (" more <filename>\n\r");
#elif LANG_RUS
printf (" more <¨¬ï ä ©« >\n\r");
#endif
return TRUE;
if (strlen(file)<1) {
printf (CMD_MORE_USAGE);
return TRUE;
}
if ( '/' == file[0])
{
strcpy(temp, file);
if ( !file_check(temp) )
if ( '/' == file[0])
{
file_not_found(file);
return FALSE;
strcpy(temp, file);
if ( !file_check(temp) )
{
file_not_found(file);
return FALSE;
}
}
}
else
{
strcpy(temp, cur_dir);
if (temp[strlen(temp)-1] != '/')
strcat(temp, "/"); // add slash
strcat(temp, file);
if ( !file_check(temp) )
else
{
file_not_found(file);
return FALSE;
strcpy(temp, cur_dir);
if (temp[strlen(temp)-1] != '/')
strcat(temp, "/"); // add slash
strcat(temp, file);
if ( !file_check(temp) )
{
file_not_found(file);
return FALSE;
}
}
}
k70.p00 = 5;
k70.p04 = k70.p12 = 0;
//k70.p08 = 0;
k70.p16 = (unsigned) &bdvk;
k70.p20 = 0;
k70.p21 = temp;
result = kol_file_70(&k70); // ¯®«ãç ¥¬ ¨­ä®à¬ æ¨î ® ä ©«¥
if ( 0 != result )
return FALSE;
filesize = bdvk.p32; // ¯®«ãç ¥¬ à §¬¥à ä ©« 
buf[80]=0;
flags = con_get_flags();
for (pos=0;pos<filesize;pos+=80)
{
memset(buf, 0, 80);
k70.p00 = 0;
k70.p04 = pos;
// k70.p08 = 0; // bug for over 4Gb files, but "more" is unusable there
k70.p12 = 80;
k70.p16 = (unsigned) buf;
k70.p00 = 5;
k70.p04 = k70.p12 = 0;
//k70.p08 = 0;
k70.p16 = (unsigned) &bdvk;
k70.p20 = 0;
k70.p21 = temp;
result = kol_file_70(&k70); // ç⥭¨¥ 80 ᨬ¢®«®¢
for (i=0; i<80; i++)
{
if (27 == buf[i])
con_set_flags(flags|0x100);
else con_set_flags(flags);
printf ("%c", buf[i]);
}
result = kol_file_70(&k70); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0ACA0> <20><><E4A0A9>
if ( 0 != result )
{
con_set_flags(flags);
printf ("\n\r");
return TRUE;
}
return FALSE;
}
con_set_flags(flags);
printf ("\n\r");
return TRUE;
filesize = bdvk.p32; // <20><><EFBFBD><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><><E4A0A9>
buf[80]=0;
flags = con_get_flags();
for (pos=0;pos<filesize;pos+=80)
{
memset(buf, 0, 80);
k70.p00 = 0;
k70.p04 = pos;
// k70.p08 = 0; // bug for over 4Gb files, but "more" is unusable there
k70.p12 = 80;
k70.p16 = (unsigned) buf;
k70.p20 = 0;
k70.p21 = temp;
result = kol_file_70(&k70); // <20><EFBFBD><E2A5AD> 80 ᨬ<><E1A8AC><EFBFBD><EFBFBD><EFBFBD>
for (i=0; i<80; i++)
{
if (27 == buf[i])
con_set_flags(flags|0x100);
else con_set_flags(flags);
printf ("%c", buf[i]);
}
if ( 0 != result )
{
con_set_flags(flags);
printf ("\n\r");
return TRUE;
}
}
con_set_flags(flags);
printf ("\n\r");
return TRUE;
}

View File

@@ -24,11 +24,7 @@ int cmd_mv(char param[])
if (argc != 2)
{
#if LANG_ENG
printf(" mv <file_in> <file_out>\n\r");
#elif LANG_RUS
printf(" mv <¨áâ®ç­¨ª> <१ã«ìâ â>\n\r");
#endif
printf(CMD_MV_USAGE);
parameters_free(argc, argv);
return TRUE;
}

View File

@@ -1,40 +1,28 @@
int cmd_pkill(char param[])
{
int i=1, n=0; int process_count=0;
char *buf1k=NULL;
int i = 1, n = 0; int process_count = 0;
char *buf1k = NULL;
unsigned PID=0;
#ifdef LANG_RUS
#define PKILL_HELP " pkill <¨¬ï_¯à®æ¥áá >\n\r"
#define PKILL_KILL " PID: %u - 㡨â\n"
#define PKILL_NOT_KILL " PID: %u - ­¥ 㡨â\n"
#define PKILL_NOT_FOUND " <20>à®æ¥áᮢ á â ª¨¬ ¨¬¥­¥¬ ­¥ ­ ©¤¥­®!\n"
#else
#define PKILL_HELP " pkill <process_name>\n\r"
#define PKILL_KILL " PID: %u - killed\n"
#define PKILL_NOT_KILL " PID: %u - not killed\n"
#define PKILL_NOT_FOUND " No processes with this name were found!\n"
#endif
if(!strlen(param)){
printf(PKILL_HELP);
printf(CMD_PKILL_HELP);
return TRUE;
}
buf1k = malloc(1024);
if(buf1k==NULL){
if (buf1k == NULL){
return FALSE;
}
while(i!=n){
while (i != n) {
n = kol_process_info(i, buf1k);
if(!strnicmp(buf1k+10, param, 10)){
memcpy(&PID, buf1k+30 ,sizeof(unsigned));
if(kol_process_kill_pid(PID)){
printf(PKILL_NOT_KILL, PID);
printf(CMD_PKILL_NOT_KILL, PID);
}else{
printf(PKILL_KILL, PID);
printf(CMD_PKILL_KILL, PID);
}
process_count++;
}
@@ -42,7 +30,7 @@ int cmd_pkill(char param[])
}
if(!process_count){
printf(PKILL_NOT_FOUND);
printf(CMD_PKILL_NOT_FOUND);
}
free(buf1k);

View File

@@ -2,43 +2,39 @@
int cmd_ps(char param[])
{
int i, n, sel;
char *buf1k;
unsigned PID;
short STATE;
int i, n, sel;
char *buf1k;
unsigned PID;
short STATE;
buf1k = malloc(1024);
if (NULL == buf1k)
return FALSE;
buf1k = malloc(1024);
if (NULL == buf1k)
return FALSE;
sel = param && strlen(param) > 0;
sel = param && strlen(param) > 0;
printf (" PID NAME RAM KB\n\r", PID, buf1k+10);
printf (" PID NAME RAM KB\n\r", PID, buf1k+10);
for (i = 1;;i++)
{
n = kol_process_info(i, buf1k);
memcpy(&PID, buf1k+30 ,sizeof(unsigned));
STATE = *(buf1k+50);
if (9 != STATE)
{
if (!sel || 0 == strnicmp(param, buf1k+10, 10))
{
printf (" %7u %11s %d\n\r", PID, buf1k+10, (*(int*)(buf1k+26)+1)/1024);
if (sel)
{
for (i = 1;;i++) {
n = kol_process_info(i, buf1k);
memcpy(&PID, buf1k+30 ,sizeof(unsigned));
STATE = *(buf1k+50);
if (9 != STATE) {
if (!sel || 0 == strnicmp(param, buf1k+10, 10)) {
printf (" %7u %11s %d\n\r", PID, buf1k+10, (*(int*)(buf1k+26)+1)/1024);
if (sel) {
LAST_PID = PID;
int cpu_tck = kol_system_cpufreq() / 100;
printf (" CPU %d%% RAM %d\n\r", *(int*)buf1k / cpu_tck , *(int*)(buf1k+26)+1);
}
}
}
if (i == n)
break;
if (i == n)
break;
}
free(buf1k);
return TRUE;
free(buf1k);
return TRUE;
}

View File

@@ -1,7 +1,6 @@
int cmd_pwd(char param[])
{
printf (" %s%c\n\r", cur_dir, cur_dir[strlen(cur_dir)-1]=='/'?' ':'/' );
return TRUE;
int cmd_pwd(char param[]) {
printf (" %s%c\n\r", cur_dir, cur_dir[strlen(cur_dir)-1]=='/'?' ':'/' );
return TRUE;
}

View File

@@ -1,10 +1,9 @@
int cmd_reboot(char param[])
{
if (!strcmp(param, "kernel"))
kol_system_end(4);
else
kol_system_end(3);
return TRUE;
int cmd_reboot(char param[]) {
if (!strcmp(param, "kernel"))
kol_system_end(4);
else
kol_system_end(3);
return TRUE;
}

View File

@@ -1,6 +1,5 @@
int cmd_ren(char param[])
{
int cmd_ren(char param[]) {
char* argv[100];
int argc;
/*
@@ -9,19 +8,14 @@ int cmd_ren(char param[])
*/
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
if (argc != 2) {
printf(CMD_REN_USAGE);
parameters_free(argc, argv);
return TRUE;
}
char *x;
if (x = strrchr(argv[1], '/') != 0) // argv[1] must be file name, not path
{
//char *x;
// argv[1] must be file name, not path
if (strrchr(argv[1], '/') != NULL) {
//printf("%d %s", x, argv[1]);
return FALSE;
}

View File

@@ -1,57 +1,51 @@
int cmd_rm(char file[])
{
int cmd_rm(char file[]) {
kol_struct70 k70;
char temp[FILENAME_MAX];
unsigned result;
kol_struct70 k70;
char temp[FILENAME_MAX];
unsigned result;
if (NULL == file || strlen(file) == 0)
{
#if LANG_ENG
printf (" rm <filename>\n\r");
#elif LANG_RUS
printf (" rm <¨¬ï ä ©« >\n\r");
#endif
return TRUE;
if (NULL == file || strlen(file) == 0) {
printf (CMD_RM_USAGE);
return TRUE;
}
if ( '/' == file[0])
{
strcpy(temp, file);
if ( !file_check(temp) )
if ( '/' == file[0])
{
return FALSE;
strcpy(temp, file);
if ( !file_check(temp) )
{
return FALSE;
}
}
}
else
{
strcpy(temp, cur_dir);
if (temp[strlen(temp)-1] != '/')
strcat(temp, "/"); // add slash
strcat(temp, file);
if ( !file_check(temp) )
else
{
return FALSE;
strcpy(temp, cur_dir);
if (temp[strlen(temp)-1] != '/')
strcat(temp, "/"); // add slash
strcat(temp, file);
if ( !file_check(temp) )
{
return FALSE;
}
}
}
k70.p00 = 8;
k70.p04 = 0;
//k70.p08 = 0;
k70.p12 = 0;
k70.p16 = 0;
k70.p20 = 0;
k70.p21 = temp;
k70.p00 = 8;
k70.p04 = 0;
//k70.p08 = 0;
k70.p12 = 0;
k70.p16 = 0;
k70.p20 = 0;
k70.p21 = temp;
result = kol_file_70(&k70);
result = kol_file_70(&k70);
if (0 == result)
return TRUE;
else
return FALSE;
if (0 == result)
return TRUE;
else
return FALSE;
}

View File

@@ -1,53 +1,44 @@
int cmd_rmdir(char dir[])
{
int cmd_rmdir(char dir[]) {
char temp[FILENAME_MAX];
kol_struct70 k70;
unsigned result;
char temp[FILENAME_MAX];
kol_struct70 k70;
unsigned result;
if (NULL == dir || strlen(dir) == 0)
{
#if LANG_ENG
printf(" rmdir <directory>\n\r");
#elif LANG_RUS
printf(" rmdir <¤¨à¥ªâ®à¨ï>\n\r");
#endif
return TRUE;
if (NULL == dir || strlen(dir) == 0) {
printf(CMD_RMDIR_USAGE);
return TRUE;
}
if ( ( 0 == strcmp(dir, ".") ) || ( 0 == strcmp(dir, "..") ) || ( 0 == strcmp(cur_dir, "/")) )
{
return FALSE;
if ( ( 0 == strcmp(dir, ".") ) || ( 0 == strcmp(dir, "..") ) || ( 0 == strcmp(cur_dir, "/")) ) {
return FALSE;
}
k70.p00 = 8;
k70.p04 = 0;
//k70.p08 = 0;
k70.p12 = 0;
k70.p16 = 0;
k70.p20 = 0;
k70.p00 = 8;
k70.p04 = 0;
//k70.p08 = 0;
k70.p12 = 0;
k70.p16 = 0;
k70.p20 = 0;
if ( '/' == dir[0])
k70.p21 = dir;
else
{
strcpy(temp, cur_dir);
if (temp[strlen(temp)-1] != '/')
strcat(temp, "/"); // add slash
strcat(temp, dir);
k70.p21 = temp;
if ( '/' == dir[0])
k70.p21 = dir;
else {
strcpy(temp, cur_dir);
if (temp[strlen(temp)-1] != '/')
strcat(temp, "/"); // add slash
strcat(temp, dir);
k70.p21 = temp;
}
if ( !dir_check(temp) )
return FALSE;
if ( !dir_check(temp) )
return FALSE;
result = kol_file_70(&k70);
result = kol_file_70(&k70);
if (0 == result)
return TRUE;
else
return FALSE;
if (0 == result)
return TRUE;
else
return FALSE;
}

View File

@@ -1,7 +1,6 @@
int cmd_shutdown(char param[])
{
kol_system_end(2);
return TRUE;
int cmd_shutdown(char param[]) {
kol_system_end(2);
return TRUE;
}

View File

@@ -1,20 +1,12 @@
int cmd_sleep(char param[])
{
int delay;
if (!strlen(param))
{
#if LANG_ENG
printf(" sleep <time in the 1/100 of second>\n\r");
#elif LANG_RUS
printf(" sleep <¨­â¥à¢ « ¢ á®âëå ¤®«ïx ᥪ㭤ë>\n\r");
#endif
return TRUE;
int cmd_sleep(char param[]) {
int delay;
if (!strlen(param)) {
printf(CMD_SLEEP_USAGE);
return TRUE;
}
delay = _atoi(param);
kol_sleep((unsigned)delay);
return TRUE;
delay = atoi(param);
kol_sleep((unsigned)delay);
return TRUE;
}

View File

@@ -1,61 +1,51 @@
int cmd_touch(char file[])
{
kol_struct70 k70;
char temp[FILENAME_MAX];
unsigned result;
kol_struct70 k70;
char temp[FILENAME_MAX];
unsigned result;
if (NULL == file || strlen(file) == 0)
{
#if LANG_ENG
printf(" touch <filename>\n\r");
#elif LANG_RUS
printf(" touch <¨¬ï ä ©« >\n\r");
#endif
return TRUE;
if (NULL == file || strlen(file) == 0) {
printf(CMD_TOUCH_USAGE);
return TRUE;
}
if ( ( 0 == strcmp(file, ".") ) || ( 0 == strcmp(file, "..") ) || ( 0 == strcmp(cur_dir, "/")) )
{
return FALSE;
if ( ( 0 == strcmp(file, ".") ) || ( 0 == strcmp(file, "..") ) || ( 0 == strcmp(cur_dir, "/")) ) {
return FALSE;
}
if ( '/' == file[0])
{
strcpy(temp, file);
if ( '/' == file[0]) {
strcpy(temp, file);
if ( !file_check(temp) )
k70.p00 = 2;
else
k70.p00 = 3;
}
else
{
strcpy(temp, cur_dir);
if (temp[strlen(temp)-1] != '/')
strcat(temp, "/"); // add slash
strcat(temp, file);
if ( !file_check(temp) )
k70.p00 = 2;
else
k70.p00 = 3;
if ( !file_check(temp) )
k70.p00 = 2;
else
k70.p00 = 3;
} else {
strcpy(temp, cur_dir);
if (temp[strlen(temp)-1] != '/')
strcat(temp, "/"); // add slash
strcat(temp, file);
if ( !file_check(temp) )
k70.p00 = 2;
else
k70.p00 = 3;
}
k70.p04 = 0;
//k70.p08 = 0;
k70.p12 = 0;
k70.p16 = 0;
k70.p20 = 0;
k70.p21 = temp;
k70.p04 = 0;
//k70.p08 = 0;
k70.p12 = 0;
k70.p16 = 0;
k70.p20 = 0;
k70.p21 = temp;
//printf("try to touch [%s], fn70(%d)\n\r", temp, k70.p00);
//printf("try to touch [%s], fn70(%d)\n\r", temp, k70.p00);
result = kol_file_70(&k70);
result = kol_file_70(&k70);
if (0 == result)
return TRUE;
else
return FALSE;
if (0 == result)
return TRUE;
else
return FALSE;
}

View File

@@ -1,20 +1,20 @@
int cmd_uptime(char param[])
{
unsigned time_tick, up_days, up_hours, up_minutes, up_seconds, up_millisecs;
void get_str_uptime(char *str, const char *fmt) {
unsigned time_tick, up_days, up_hours, up_minutes, up_seconds, up_millisecs;
time_tick = kol_time_tick();
up_days = (time_tick/(24*60*60*100));
up_hours = (time_tick/(60*60*100))%24;
up_minutes = (time_tick/(60*100))%60;
up_seconds = (time_tick/100)%60;
up_millisecs = (time_tick*10)%100;
time_tick = kol_time_tick();
up_days = (time_tick/(24*60*60*100));
up_hours = (time_tick/(60*60*100))%24;
up_minutes = (time_tick/(60*100))%60;
up_seconds = (time_tick/100)%60;
up_millisecs = (time_tick*10)%100;
#if LANG_ENG
printf (" Uptime: %d day(s), %d:%d:%d.%d\n\r", up_days, up_hours, up_minutes, up_seconds, up_millisecs);
#elif LANG_RUS
printf (" Uptime: %d ¤­¥©, %d:%d:%d.%d\n\r", up_days, up_hours, up_minutes, up_seconds, up_millisecs);
#endif
return TRUE;
sprintf (str, fmt, up_days, up_hours, up_minutes, up_seconds, up_millisecs);
}
int cmd_uptime(char param[]) {
get_str_uptime(tmpstr, CMD_UPTIME_FMT);
printf(tmpstr);
return TRUE;
}

View File

@@ -1,45 +1,31 @@
int cmd_ver(char param[])
{
void get_str_kernel_version(char *str, const char *fmt) {
char *kvbuf;
char *vA, *vB, *vC, *vD;
unsigned *Rev;
if (!strcmp(param, "kernel"))
{
char *kvbuf;
char *vA, *vB, *vC, *vD;
unsigned *Rev;
kvbuf = malloc(16);
kol_get_kernel_ver(kvbuf);
vA = kvbuf+0;
vB = kvbuf+1;
vC = kvbuf+2;
vD = kvbuf+3;
Rev = (unsigned*)(kvbuf + 5);
kvbuf = malloc(16);
kol_get_kernel_ver(kvbuf);
vA = kvbuf+0;
vB = kvbuf+1;
vC = kvbuf+2;
vD = kvbuf+3;
Rev = (unsigned*)(kvbuf + 5);
sprintf (str, fmt, *vA, *vB, *vC, *vD, *Rev);
#if LANG_ENG
printf (" KolibriOS v%d.%d.%d.%d. Kernel SVN-rev.: %d\n\r", *vA, *vB, *vC, *vD, *Rev);
#elif LANG_RUS
printf (" KolibriOS v%d.%d.%d.%d. SVN-ॢ. ï¤à : %d\n\r", *vA, *vB, *vC, *vD, *Rev);
#endif
free(kvbuf);
}
free(kvbuf);
void get_str_cpu_info(char *str) {
unsigned a, b, c, d;
return TRUE;
}
if (!strcmp(param, "cpu"))
{
unsigned a, b, c, d;
char str[13];
str[12] = '\0';
asm ("cpuid" :
"=a" (a),
"=b" (b),
"=c" (c),
"=d" (d):
"a"(0));
asm ("cpuid" :
"=a" (a),
"=b" (b),
"=c" (c),
"=d" (d):
"a"(0));
str[0] = (b&0x000000ff) >> 0;
str[1] = (b&0x0000ff00) >> 8;
@@ -55,13 +41,24 @@ if (!strcmp(param, "cpu"))
str[9] = (c&0x0000ff00) >> 8;
str[10] = (c&0x00ff0000) >> 16;
str[11] = (c&0xff000000) >> 24;
printf("%s\n\r", str);
return TRUE;
}
printf (" Shell v%s\n\r", SHELL_VERSION);
return TRUE;
str[12] = '\0';
}
int cmd_ver(char param[]) {
if (!strcmp(param, "kernel")) {
get_str_kernel_version(tmpstr, CMD_VER_FMT1);
printf(tmpstr);
return TRUE;
}
if (!strcmp(param, "cpu")) {
char str[13];
get_str_cpu_info(str);
printf("%s\n\r", str);
return TRUE;
}
printf (" Shell v%s\n\r", SHELL_VERSION);
return TRUE;
}

View File

@@ -1,52 +1,42 @@
int cmd_waitfor(char param[])
// waits for LASTPID or pid in param
{
/* waits for LASTPID or pid in param */
int cmd_waitfor(char param[]) {
int i, n, sel, sel_pid;
char *buf1k;
unsigned PID;
short STATE;
int i, n, sel, sel_pid;
char *buf1k;
unsigned PID;
short STATE;
sel = param && strlen(param) > 0;
sel_pid = LAST_PID;
if (sel)
{
sel_pid = _atoi(param);
sel = param && strlen(param) > 0;
sel_pid = LAST_PID;
if (sel) {
sel_pid = atoi(param);
}
if (0 == sel_pid)
return FALSE;
if (0 == sel_pid) return FALSE;
#if LANG_ENG
printf(" Awaing finish PID %d\n\r", sel_pid);
#elif LANG_RUS
printf(" ަ¨¤ ¥¬ § ¢¥à襭¨ï PID %d\n\r", sel_pid);
#endif
printf(CMD_WAITFOR_FMT, sel_pid);
buf1k = malloc(1024);
if (NULL == buf1k)
return FALSE;
buf1k = malloc(1024);
if (NULL == buf1k)
return FALSE;
while(1)
{
for (i = 1;;i++)
{
n = kol_process_info(i, buf1k);
PID = *(buf1k+30);
STATE = *(buf1k+50);
if (PID == sel_pid)
if(9 == STATE)
while(1) {
for (i = 1;;i++) {
n = kol_process_info(i, buf1k);
PID = *(buf1k+30);
STATE = *(buf1k+50);
if (PID == sel_pid)
if(9 == STATE)
goto exit_normal;
else break;
if (i == n)
goto exit_normal;
else break;
if (i == n)
goto exit_normal;
}
kol_sleep(10); // 100ms
kol_sleep(10); // 100ms
}
exit_normal:
free(buf1k);
return TRUE;
exit_normal:
free(buf1k);
return TRUE;
}