Fixed get os version in SHELL

Signed-off-by: Maxim Logaev <maxlogaev@proton.me>
This commit is contained in:
Max Logaev 2024-03-31 03:08:13 +03:00
parent fa4755138f
commit 306d4c8593
5 changed files with 117 additions and 107 deletions

View File

@ -759,6 +759,34 @@ KOSAPI void _ksys_shutdown(uint32_t shd_param)
asm_inline("int $0x40" ::"a"(18), "b"(9), "c"(shd_param));
}
/*========= Function 18, subfunction 13 - get OS version. ========*/
#define KSYS_VER_HASH_LEN 9
typedef struct {
union {
struct {
uint8_t major;
uint8_t minor;
uint8_t patch;
uint8_t __reserved;
};
uint32_t value;
} tag;
uint16_t offset;
char hash[KSYS_VER_HASH_LEN + 1];
} ksys_os_ver_t;
KOSAPI int _ksys_get_os_ver(ksys_os_ver_t *ver)
{
int status;
asm_inline(
"int $0x40"
: "=a"(status)
: "a"(18), "b"(13), "c"(ver));
return status;
}
/*========= Function 18, subfunction 16 - get size of free RAM. ========*/
KOSAPI size_t _ksys_get_ram_size(void)

View File

@ -6,16 +6,16 @@ void get_str_meminfo(char *str) {
}
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);
char str_krnl_ver[64];
get_str_kernel_version(str_krnl_ver, "v%d.%d.%d-%d-g%s");
char str_uptime[64];
get_str_uptime(str_uptime, "%d day(s), %d:%d:%d.%d");
char *str_resolution = malloc(24);
char str_resolution[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);
char str_cpu_info[16];
get_str_cpu_info(str_cpu_info);
char *str_meminfo = malloc(24);
char str_meminfo[24];
get_str_meminfo(str_meminfo);
printf(/*"\033[0;34;40m \033[0m\n\r"*/
@ -42,12 +42,7 @@ int cmd_kfetch(char param[]) {
"\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);
"\033[0;36mOS\033[0m: KolibriOS", "\033[0;36mVersion\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,52 +1,42 @@
void get_str_kernel_version(char *str, const char *fmt) {
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);
sprintf (str, fmt, *vA, *vB, *vC, *vD, *Rev);
free(kvbuf);
ksys_os_ver_t ver;
_ksys_get_os_ver(&ver);
sprintf(str, fmt, ver.tag.major, ver.tag.minor, ver.tag.patch, ver.offset, ver.hash);
}
void get_str_cpu_info(char *str) {
unsigned a, b, c, d;
asm ("cpuid" :
"=a" (a),
"=b" (b),
"=c" (c),
"=d" (d):
"a"(0));
__asm__ __volatile__(
"cpuid"
:"=a" (a),
"=b" (b),
"=c" (c),
"=d" (d):
"a"(0)
);
str[0] = (b&0x000000ff) >> 0;
str[1] = (b&0x0000ff00) >> 8;
str[2] = (b&0x00ff0000) >> 16;
str[3] = (b&0xff000000) >> 24;
str[0] = (b & 0x000000ff) >> 0;
str[1] = (b & 0x0000ff00) >> 8;
str[2] = (b & 0x00ff0000) >> 16;
str[3] = (b & 0xff000000) >> 24;
str[4] = (d&0x000000ff) >> 0;
str[5] = (d&0x0000ff00) >> 8;
str[6] = (d&0x00ff0000) >> 16;
str[7] = (d&0xff000000) >> 24;
str[4] = (d & 0x000000ff) >> 0;
str[5] = (d & 0x0000ff00) >> 8;
str[6] = (d & 0x00ff0000) >> 16;
str[7] = (d & 0xff000000) >> 24;
str[8] = (c&0x000000ff) >> 0;
str[9] = (c&0x0000ff00) >> 8;
str[10] = (c&0x00ff0000) >> 16;
str[11] = (c&0xff000000) >> 24;
str[8] = (c & 0x000000ff) >> 0;
str[9] = (c & 0x0000ff00) >> 8;
str[10] = (c & 0x00ff0000) >> 16;
str[11] = (c & 0xff000000) >> 24;
str[12] = '\0';
}
int cmd_ver(char param[]) {
if (!strcmp(param, "kernel")) {
get_str_kernel_version(tmpstr, CMD_VER_FMT1);
get_str_kernel_version(tmpstr, " KolibriOS v%d.%d.%d-%d-g%s\n\r");
printf(tmpstr);
return TRUE;
}
@ -61,4 +51,3 @@ int cmd_ver(char param[]) {
printf (" Shell v%s\n\r", SHELL_VERSION);
return TRUE;
}

View File

@ -58,8 +58,7 @@ const command_t COMMANDS[]=
#define CMD_RMDIR_USAGE " rmdir <directory>\n\r"
#define CMD_SLEEP_USAGE " sleep <time in the 1/100 of second>\n\r"
#define CMD_TOUCH_USAGE " touch <filename>\n\r"
#define CMD_UPTIME_FMT " Uptime: %d day(s), %d:%d:%d.%d\n\r"
#define CMD_VER_FMT1 " KolibriOS v%d.%d.%d.%d. Kernel SVN-rev.: %d\n\r"
#define CMD_UPTIME_FMT " Uptime: %d day(s), %d:%d:%d.%d\n\r"
#define CMD_WAITFOR_FMT " Awaing finish PID %d\n\r"
#define EXEC_STARTED_FMT " '%s' started. PID = %d\n\r"
#define EXEC_SCRIPT_ERROR_FMT "Error in '%s' : script must start with #SHS line\n\r"

View File

@ -2,67 +2,66 @@
const command_t COMMANDS[]=
{
{"about", " ‚뢮¤¨â ¨­ä®à¬ æ¨î ® ¯à®£à ¬¬¥ Shell\n\r", &cmd_about},
{"alias", " <20>®ª §ë¢ ¥â ¨ ¯®§¢®«ï¥â ¨§¬¥­¨âì ᯨ᮪ ᨭ®­¨¬®¢ ª®¬ ­¤\n\r", &cmd_alias},
{"cd", " ˆ§¬¥­ï¥â ⥪ãéãî ¤¥à¨ªâ®à¨î. ˆá¯®«ì§®¢ ­¨¥:\n\r cd <¤¨à¥ªâ®à¨ï>\n\r", &cmd_cd},
{"clear", " Žç¨é ¥â íªà ­\n\r", &cmd_clear},
{"cp", " Š®¯¨àã¥â ä ©«\n\r", &cmd_cp},
{"mv", " <20>¥à¥¬¥é ¥â ä ©«\n\r", &cmd_mv},
{"ren", " <20>¥à¥¨¬¥­®¢ë¢ ¥â ä ©«\n\r", &cmd_ren},
{"date", " <20>®ª §ë¢ ¥â ⥪ãéãî ¤ âã ¨ ¢à¥¬ï\n\r", &cmd_date},
{"echo", " ‚뢮¤¨â ¤ ­­ë¥ ­  íªà ­. ˆá¯®«ì§®¢ ­¨¥:\n\r echo <¤ ­­ë¥>\n\r", &cmd_echo},
{"exit", " ‡ ¢¥à襭¨¥ à ¡®âë Shell\n\r", &cmd_exit},
{"free", " <20>®ª §ë¢ ¥â ®¡êñ¬ ®¯¥à â¨¢­®© ¯ ¬ïâ¨: ¢á¥©, ᢮¡®¤­®© ¨ ¨á¯®«ì§ã¥¬®©\n\r", &cmd_memory},
{"help", " ‘¯à ¢ª  ¯® ª®¬ ­¤ ¬. ˆá¯®«ì§®¢ ­¨¥:\n\r help ;ᯨ᮪ ¢á¥å ª®¬ ­¤\n\r help <ª®¬ ­¤ > ;á¯à ¢ª  ¯® ª®¬ ­¤¥\n\r", &cmd_help},
{"history", " ‘¯¨á®ª ¨á¯®«ì§®¢ ­­ëå ª®¬ ­¤\n\r", &cmd_history},
{"kfetch", " <20>¥ç â ¥â «®£® ¨ ¨­ä®à¬ æ¨î ® á¨á⥬¥.\n\r", &cmd_kfetch},
{"kill", " “¡¨¢ ¥â ¯à®æ¥áá. ˆá¯®«ì§®¢ ­¨¥:\n\r kill <PID ¯à®æ¥áá >\n\r kill all\n\r", &cmd_kill},
{"pkill", " “¡¨¢ ¥â ¢á¥ ¯à®æ¥ááë ¯® ¨¬¥­¨. ˆá¯®«ì§®¢ ­¨¥:\n\r pkill <¨¬ï_¯à®æ¥áá >\n\r", &cmd_pkill},
{"ls", " ‚뢮¤¨â ᯨ᮪ ä ©«®¢. ˆá¯®«ì§®¢ ­¨¥:\n\r ls ;ᯨ᮪ ä ©«®¢ ¢ ⥪ã饬 ª â «®£¥\n\r ls <¤¨à¥ªâ®à¨ï> ;ᯨ᮪ ä ©«®¢ ¨§ § ¤ ­­®© ¤¨à¥ªâ®à¨¨\n\r", &cmd_ls},
{"about", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0ACA0> <20> <20>ணࠬ<E0AEA3><E0A0AC> Shell\n\r", &cmd_about},
{"alias", " <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᯨ᮪ ᨭ<><E1A8AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n\r", &cmd_alias},
{"cd", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E2A5AA><EFBFBD><EFBFBD> <20><><EFBFBD><E0A8AA><EFBFBD>. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r cd <<3C><><EFBFBD><E0A5AA><EFBFBD>>\n\r", &cmd_cd},
{"clear", " <EFBFBD><EFBFBD><EFBFBD> <20><>\n\r", &cmd_clear},
{"cp", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>\n\r", &cmd_cp},
{"mv", " <20><EFBFBD><EFBFBD><EFBFBD><>\n\r", &cmd_mv},
{"ren", " <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>\n\r", &cmd_ren},
{"date", " <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E2A5AA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><EFBFBD>\n\r", &cmd_date},
{"echo", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>࠭. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r echo <<3C><><EFBFBD><EFBFBD><EFBFBD>>\n\r", &cmd_echo},
{"exit", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A0A1><EFBFBD> Shell\n\r", &cmd_exit},
{"free", " <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E2A8A2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>: <20>ᥩ, ᢮<><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><EFBFBD><E1AFAE><EFBFBD><E3A5AC>\n\r", &cmd_memory},
{"help", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r help ;ᯨ᮪ <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n\r help <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>> ;<3B><EFBFBD><E0A0A2> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n\r", &cmd_help},
{"history", " <EFBFBD><EFBFBD><EFBFBD><20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n\r", &cmd_history},
{"kfetch", " <20><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><E0ACA0> <20> <20><><EFBFBD>.\n\r", &cmd_kfetch},
{"kill", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r kill <PID <20><><EFBFBD><EFBFBD><EFBFBD>>\n\r kill all\n\r", &cmd_kill},
{"pkill", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r pkill <<3C><><EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD><EFBFBD>>\n\r", &cmd_pkill},
{"ls", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᯨ᮪ 䠩<><E4A0A9><EFBFBD>. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r ls ;ᯨ᮪ 䠩<><E4A0A9><EFBFBD> <20><><20><><EFBFBD><E2A0AB><EFBFBD>\n\r ls <<3C><><EFBFBD><E0A5AA><EFBFBD>> ;ᯨ᮪ 䠩<><E4A0A9><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>\n\r", &cmd_ls},
{"lsmod", " list working driver \n\r", &cmd_lsmod},
{"mkdir", " ‘®§¤ ¥â ª â «®£ ¨ த¨â¥«ì᪨¥ ª â «®£¨ ¯à¨ ­¥®¡å®¤¨¬®áâ¨. ˆá¯®«ì§®¢ ­¨¥:\n\r mkdir <¨¬ï/¯ ¯ª¨>", &cmd_mkdir},
{"more", " ‚뢮¤¨â ᮤ¥à¦¨¬®¥ ä ©«  ­  íªà ­. ˆá¯®«ì§®¢ ­¨¥:\n\r more <¨¬ï ä ©« >\n\r", &cmd_more},
{"ps", " ‚뢮¤¨â ᯨ᮪ ¯à®æ¥áᮢ\n\r …᫨ 㪠§ ­® <¨¬ï¯à®æ¥áá >, ¯®ª §ë¢ ¥â ¡®«ìè¥ ¤ ­­ëå ¨ á®åà ­ï¥â LASTPID\n\r", &cmd_ps},
{"pwd", " <20>®ª §ë¢ ¥â ¨¬ï ⥪ã饩 ¤¨à¥ªâ®à¨¨\n\r", &cmd_pwd},
{"reboot", " <20>¥à¥§ £à㦠¥â ª®¬¯ìîâ¥à ¨«¨ ï¤à® KolibriOS. ˆá¯®«ì§®¢ ­¨¥:\n\r reboot ;¯¥à¥§ £à㧨âì <20>Š\n\r reboot kernel ;¯¥à¥§ ¯ãáâ¨âì ï¤à® Kolibri\n\r", &cmd_reboot},
{"rm", " “¤ «ï¥â ä ©«. ˆá¯®«ì§®¢ ­¨¥:\n\r rm <¨¬ï ä ©« >\n\r", &cmd_rm},
{"rmdir", " “¤ «ï¥â ¯ ¯ªã. ˆá¯®«ì§®¢ ­¨¥:\n\r rmdir <¤¨à¥ªâ®à¨ï>\n\r", &cmd_rmdir},
{"shutdown"," ‚몫î砥⠪®¬¯ìîâ¥à\n\r", &cmd_shutdown},
{"sleep", " Žáâ ­ ¢«¨¢ ¥â à ¡®âã Shell'  ­  § ¤ ­­®¥ ¢à¥¬ï. ˆá¯®«ì§®¢ ­¨¥:\n\r sleep <¨­â¥à¢ « ¢ á®âëå ¤®«ï ᥪ㭤ë>\n\r <20>ਬ¥à:\n\r sleep 500 ;¯ ã§  ­  5 ᥪ.\n\r", &cmd_sleep},
{"touch", " ‘®§¤ ñâ ¯ãá⮩ ä ©« ¨«¨ ¨§¬¥­ï¥â ¤ âã/¢à¥¬ï ᮧ¤ ­¨ï ä ©« . ˆá¯®«ì§®¢ ­¨¥:\n\r touch <¨¬ï ä ©« >\n\r", &cmd_touch},
{"uptime", " <20>®ª §ë¢ ¥â uptime\n\r", &cmd_uptime},
{"ver", " <20>®ª §ë¢ ¥â ¢¥àá¨î. ˆá¯®«ì§®¢ ­¨¥:\n\r ver ;¢¥àá¨ï Shell\n\r ver kernel ;¢¥àá¨ï ¨ ­®¬¥à ॢ¨§¨¨ ï¤à  KolibriOS\n\r ver cpu ;¨­ä®à¬ æ¨ï ® ¯à®æ¥áá®à¥\n\r", &cmd_ver},
{"waitfor", " <20>ਮáâ ­ ¢«¨¢ ¥â ¢ë¯®«­¥­¨¥ ª®¬ ­¤. ˆá¯®«ì§®¢ ­¨¥:\n\r waitfor ;®¦¨¤ ¥¬ ¯à¥¤ë¤ã騩 § ¯ã饭­ë© ¯à®æ¥áá LASTPID\n\r waitfor <PID>;¦¤¥¬ § ¢¥à襭¨ï ¯à®æ¥áá  á 㪠§ ­­ë¬ PID\n\r", &cmd_waitfor},
{"mkdir", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E2A0AB> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><E2A0AB><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><E5AEA4><EFBFBD><EFBFBD><EFBFBD>. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r mkdir <<3C><><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>>", &cmd_mkdir},
{"more", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><E0A6A8><EFBFBD><><E4A0A9> <20><> <20><>࠭. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r more <<3C><><EFBFBD><><E4A0A9>>\n\r", &cmd_more},
{"ps", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᯨ᮪ <20><><EFBFBD><EFBFBD>\n\r <20>᫨ 㪠<><E3AAA0><EFBFBD><EFBFBD> <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA2A0> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><E0A0AD> LASTPID\n\r", &cmd_ps},
{"pwd", " <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><><20><><EFBFBD>\n\r", &cmd_pwd},
{"reboot", " <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> KolibriOS. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r reboot ;<3B><><EFBFBD><E0A5A7><EFBFBD><EFBFBD><E3A7A8> <20><>\n\r reboot kernel ;<3B><><EFBFBD><E0A5A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Kolibri\n\r", &cmd_reboot},
{"rm", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r rm <<3C><><EFBFBD><><E4A0A9>>\n\r", &cmd_rm},
{"rmdir", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r rmdir <<3C><><EFBFBD><E0A5AA><EFBFBD>>\n\r", &cmd_rmdir},
{"shutdown"," <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n\r", &cmd_shutdown},
{"sleep", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A0A1><EFBFBD> Shell'<27> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD>. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r sleep <<3C><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ᥪ㭤<E1A5AA>>\n\r <20><EFBFBD><E0A8AC>:\n\r sleep 500 ;<3B><><20><> 5 ᥪ.\n\r", &cmd_sleep},
{"touch", " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⮩ 䠩<> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>/<2F><EFBFBD><><E1AEA7><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r touch <<3C><><EFBFBD><><E4A0A9>>\n\r", &cmd_touch},
{"uptime", " <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> uptime\n\r", &cmd_uptime},
{"ver", " <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r ver ;<3B><><EFBFBD><EFBFBD><EFBFBD> Shell\n\r ver kernel ;<3B><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><><E0A5A2><EFBFBD><EFBFBD> <20><> KolibriOS\n\r ver cpu ;<3B><><EFBFBD><EFBFBD><E0ACA0> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n\r", &cmd_ver},
{"waitfor", " <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>:\n\r waitfor ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A5A4><20><><EFBFBD><EFBFBD><EFBFBD><E9A5AD> <20><><EFBFBD><EFBFBD><EFBFBD> LASTPID\n\r waitfor <PID>;<3B><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A5AD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><E3AAA0><EFBFBD><EFBFBD><EFBFBD> PID\n\r", &cmd_waitfor},
};
#define CMD_ABOUT_MSG "Shell %s\n\r"
#define CMD_CD_USAGE " cd <¤¨à¥ªâ®à¨ï>\n\r"
#define CMD_CP_USAGE " cp <¨áâ®ç­¨ª> <१ã«ìâ â>\n\r"
#define CMD_DATE_DATE_FMT " „ â  [¤¤.¬¬.££]: %x%x.%x%x.%x%x"
#define CMD_DATE_TIME_FMT "\n\r ‚६ï [çç:¬¬:áá]: %x%x:%x%x:%x%x\n\r"
#define CMD_FREE_FMT " ‚ᥣ® [Š<> / Œ<> / %%]: %-7d / %-5d / 100\n\r ‘¢®¡®¤­® [Š<> / Œ<> / %%]: %-7d / %-5d / %d\n\r ˆá¯®«ì§ã¥âáï [Š<> / Œ<EFBFBD> / %%]: %-7d / %-5d / %d\n\r"
#define CMD_HELP_AVAIL " Š®«¨ç¥á⢮ ¤®áâ㯭ëå ª®¬ ­¤: %d\n\r"
#define CMD_HELP_CMD_NOT_FOUND " Š®¬ ­¤  \'%s\' ­¥ ­ ©¤¥­ .\n\r"
#define CMD_CD_USAGE " cd <<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>\n\r"
#define CMD_CP_USAGE " cp <<EFBFBD><EFBFBD><EFBFBD><EFBFBD>> <१<><E0A5A7><EFBFBD><EFBFBD>>\n\r"
#define CMD_DATE_DATE_FMT " <EFBFBD><EFBFBD><EFBFBD> [<5B><>.<2E><>.<2E><>]: %x%x.%x%x.%x%x"
#define CMD_DATE_TIME_FMT "\n\r <EFBFBD><EFBFBD> [<5B><>:<3A><>:<3A><>]: %x%x:%x%x:%x%x\n\r"
#define CMD_FREE_FMT " <EFBFBD><EFBFBD> [<5B><> / <20><> / %%]: %-7d / %-5d / 100\n\r <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [<5B><> / <20><> / %%]: %-7d / %-5d / %d\n\r <20><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [<5B><> / <20><EFBFBD> / %%]: %-7d / %-5d / %d\n\r"
#define CMD_HELP_AVAIL " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><E3AFAD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: %d\n\r"
#define CMD_HELP_CMD_NOT_FOUND " <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> \'%s\' <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n\r"
#define CMD_KILL_USAGE " kill <PID>\n\r"
#define CMD_MKDIR_USAGE " mkdir <¤¨à¥ªâ®à¨ï>\n\r"
#define CMD_MORE_USAGE " more <¨¬ï ä ©« >\n\r"
#define CMD_MV_USAGE " mv <¨áâ®ç­¨ª> <१ã«ìâ â>\n\r"
#define CMD_PKILL_HELP " pkill <¨¬ï ¯à®æ¥áá >\n\r"
#define CMD_PKILL_KILL " PID: %u - 㡨â\n"
#define CMD_PKILL_NOT_KILL " PID: %u - ­¥ 㡨â\n"
#define CMD_PKILL_NOT_FOUND " <20>à®æ¥áᮢ á â ª¨¬ ¨¬¥­¥¬ ­¥ ­ ©¤¥­®!\n"
#define CMD_MKDIR_USAGE " mkdir <<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>\n\r"
#define CMD_MORE_USAGE " more <<EFBFBD><EFBFBD><EFBFBD><><E4A0A9>>\n\r"
#define CMD_MV_USAGE " mv <<EFBFBD><EFBFBD><EFBFBD><EFBFBD>> <१<><E0A5A7><EFBFBD><EFBFBD>>\n\r"
#define CMD_PKILL_HELP " pkill <<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>>\n\r"
#define CMD_PKILL_KILL " PID: %u - <EFBFBD>\n"
#define CMD_PKILL_NOT_KILL " PID: %u - <EFBFBD><EFBFBD><>\n"
#define CMD_PKILL_NOT_FOUND " <20><EFBFBD><EFBFBD><EFBFBD><20><><E2A0AA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!\n"
#define CMD_REN_USAGE " ren <ä ©«> <­®¢®¥ ¨¬ï>\n\r"
#define CMD_RM_USAGE " rm <¨¬ï ä ©« >\n\r"
#define CMD_RMDIR_USAGE " rmdir <¤¨à¥ªâ®à¨ï>\n\r"
#define CMD_SLEEP_USAGE " sleep <¨­â¥à¢ « ¢ á®âëå ¤®«ïx ᥪ㭤ë>\n\r"
#define CMD_TOUCH_USAGE " touch <¨¬ï ä ©« >\n\r"
#define CMD_UPTIME_FMT " Uptime: %d ¤­¥©, %d:%d:%d.%d\n\r"
#define CMD_VER_FMT1 " KolibriOS v%d.%d.%d.%d. SVN-ॢ. ï¤à : %d\n\r"
#define CMD_WAITFOR_FMT " Ž¦¨¤ ¥¬ § ¢¥à襭¨ï PID %d\n\r"
#define EXEC_STARTED_FMT " '%s' § ¯ã饭. PID = %d\n\r"
#define EXEC_SCRIPT_ERROR_FMT "Žè¨¡ª  ¢ '%s' : áªà¨¯â ¤®«¦¥­ ­ ç¨­ âìáï á® áâà®çª¨ #SHS\n\r"
#define UNKNOWN_CMD_ERROR " Žè¨¡ª !\n\r"
#define CON_APP_ERROR " Žè¨¡ª  ¢ ª®­á®«ì­®¬ ¯à¨«®¦¥­¨¨.\n\r"
#define FILE_NOT_FOUND_ERROR " ” ©« '%s' ­¥ ­ ©¤¥­.\n\r"
#define CMD_REN_USAGE " ren <䠩<>> <<3C><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>>\n\r"
#define CMD_RM_USAGE " rm <<3C><><EFBFBD><><E4A0A9>>\n\r"
#define CMD_RMDIR_USAGE " rmdir <<3C><><EFBFBD><E0A5AA><EFBFBD>>\n\r"
#define CMD_SLEEP_USAGE " sleep <<3C><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>x ᥪ㭤<E1A5AA>>\n\r"
#define CMD_TOUCH_USAGE " touch <<3C><><EFBFBD><><E4A0A9>>\n\r"
#define CMD_UPTIME_FMT " Uptime: %d <20><><EFBFBD><EFBFBD>, %d:%d:%d.%d\n\r"
#define CMD_WAITFOR_FMT " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A5AD> PID %d\n\r"
#define EXEC_STARTED_FMT " '%s' <20><><EFBFBD><EFBFBD>饭. PID = %d\n\r"
#define EXEC_SCRIPT_ERROR_FMT "<22><EFBFBD><E8A8A1> <20> '%s' : <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E7A8AD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>窨 #SHS\n\r"
#define UNKNOWN_CMD_ERROR " <20><EFBFBD><E8A8A1>!\n\r"
#define CON_APP_ERROR " <20><EFBFBD><E8A8A1> <20> <20><><EFBFBD>᮫쭮<E1AEAB> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n\r"
#define FILE_NOT_FOUND_ERROR " <20><><EFBFBD><EFBFBD> '%s' <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n\r"