From 0a3c951b56ba71f445fee48da8cb23c8c6531efe Mon Sep 17 00:00:00 2001 From: siemargl Date: Sun, 1 Jan 2017 22:28:50 +0000 Subject: [PATCH] better up/dwn arrows, docu git-svn-id: svn://kolibrios.org@6822 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/system/shell/Docs_rus.txt | 33 +++ programs/system/shell/History.txt | 3 + programs/system/shell/bin/rus/.shell | 7 +- programs/system/shell/cmd/cmd_about.c | 6 +- programs/system/shell/cmd/cmd_alias.c | 2 +- programs/system/shell/cmd/cmd_history.c | 2 +- programs/system/shell/cmd/cmd_rm.c | 2 +- programs/system/shell/cmd/cmd_rmdir.c | 2 +- programs/system/shell/cmd/cmd_touch.c | 2 +- programs/system/shell/cmd/cmd_ver.c | 2 +- programs/system/shell/globals.h | 4 +- programs/system/shell/locale/eng/.shell | 7 +- programs/system/shell/locale/rus/.shell | 7 +- .../system/shell/modules/module_command.c | 244 +++++++++--------- programs/system/shell/system/kolibri.c | 6 +- 15 files changed, 181 insertions(+), 148 deletions(-) diff --git a/programs/system/shell/Docs_rus.txt b/programs/system/shell/Docs_rus.txt index 2ad89a957c..47a1578ba2 100644 --- a/programs/system/shell/Docs_rus.txt +++ b/programs/system/shell/Docs_rus.txt @@ -22,3 +22,36 @@ SC_CLS 6 Программа должна сама заботиться о рациональном использовании процессорного времени. Программа должна сама заботиться о закрытии именованной области. + +Команды Shell +======================================= +В угловых скобках указаны параметры команд + +about выводит версию программы shell + +alias без параметра выводит список синонимов команд, + с параметром вида newprg = old_name определяет синоним newprg + если есть пробелы, нужно значение закавычить newprg = "old name" +cd сменить текущий каталог на указанный параметром <каталог> +clear очистка экрана +cp копирование файла <источник> <результат> +date показывает дату и время +echo Выводит <данные> на экран +exit завершение работы Shell +free показывает объём оперативной памяти: всей, свободной и используемой +help показать печень команд shell. С параметром <команда> справка по команде +history cписок последних использованных команд +kill убивает процесс по . kill all убивает все пользовательские процессы PID >=2 +ls выводит список файлов в текущем каталоге или указанном <каталоге> +mkdir cоздает <каталог>. Поддерживаются абсолюные и относительные пути +more выводит содержимое <файла> на экран +ps показывает список процессов и их PID +pwd показывает имя текущего каталога +reboot перезагружает компьютер или ядро KolibriOS. reboot kernel перезапустить ядро Kolibri +rm удаляет <файл> +rmdir удаляет <каталог> +shutdown выключает компьютер +sleep приостанавливает работу Shell'а на заданное <время в сотых долях секунды> +touch создаёт пустой <файл> или изменяет дату/время создания файла. Не работает +uptime показывает время работу системы с момента загрузки +ver показывает версию Shell, ver kernel - версию и номер ревизии ядра OS, ver cpu - информацию о процессоре diff --git a/programs/system/shell/History.txt b/programs/system/shell/History.txt index 5de7b9b571..7aa0052184 100644 --- a/programs/system/shell/History.txt +++ b/programs/system/shell/History.txt @@ -1,3 +1,6 @@ +Shell 0.7.5 // 01.01.2017 // Siemargl +* ЊҐ«ЄЁҐ Ў ЈдЁЄбл, Ё§¬Ґ­Ґ­  «®ЈЁЄ  ®Ўа Ў®вЄЁ бв५®Є ўўҐае/ў­Ё§, зв®Ўл Є Є г ўбҐе + Shell 0.7.4 // 23.01.2014 // Albom * ђ Ў®в  б ЎгдҐа®¬ ®Ў¬Ґ­  (Є®ЇЁа®ў ­ЁҐ Ctrl+C Ё ўбв ўЄ  Ctrl+V бва®ЄЁ 楫ЁЄ®¬) diff --git a/programs/system/shell/bin/rus/.shell b/programs/system/shell/bin/rus/.shell index 6f527d4f06..0b0791c270 100644 --- a/programs/system/shell/bin/rus/.shell +++ b/programs/system/shell/bin/rus/.shell @@ -1,5 +1,6 @@ #SHS - -about -echo ‚ўҐ¤ЁвҐ 'help' ¤«п бЇа ўЄЁ +echo +ver kernel +echo +echo ‚ўҐ¤ЁвҐ 'help' ¤«п бЇа ўЄЁ echo diff --git a/programs/system/shell/cmd/cmd_about.c b/programs/system/shell/cmd/cmd_about.c index 01067cb9c9..5c0a31e2f5 100644 --- a/programs/system/shell/cmd/cmd_about.c +++ b/programs/system/shell/cmd/cmd_about.c @@ -2,11 +2,7 @@ int cmd_about(char param[]) { -char message[] = { -"\ -\n\r\ -Shell %s\n\r\n\r\ -"}; +char message[] = {"Shell %s\n\r"}; printf(message, SHELL_VERSION); return TRUE; diff --git a/programs/system/shell/cmd/cmd_alias.c b/programs/system/shell/cmd/cmd_alias.c index 366f4444c5..9d307fc32c 100644 --- a/programs/system/shell/cmd/cmd_alias.c +++ b/programs/system/shell/cmd/cmd_alias.c @@ -4,7 +4,7 @@ int cmd_alias(char arg[]) int result; -if (NULL == arg) +if (NULL == arg || '\0' == arg[0]) { alias_list(); return TRUE; diff --git a/programs/system/shell/cmd/cmd_history.c b/programs/system/shell/cmd/cmd_history.c index 5470b5b9ba..77ffd21080 100644 --- a/programs/system/shell/cmd/cmd_history.c +++ b/programs/system/shell/cmd/cmd_history.c @@ -4,7 +4,7 @@ int cmd_history(char arg[]) int i; -for (i = 0; i < CMD_HISTORY_NUM_REAL; i++) +for (i = CMD_HISTORY_NUM_REAL - 1; i >= 0; i--) { printf("%s\n", CMD_HISTORY[i]); } diff --git a/programs/system/shell/cmd/cmd_rm.c b/programs/system/shell/cmd/cmd_rm.c index c2f48dcfc0..7b86737634 100644 --- a/programs/system/shell/cmd/cmd_rm.c +++ b/programs/system/shell/cmd/cmd_rm.c @@ -6,7 +6,7 @@ kol_struct70 k70; char temp[256]; unsigned result; -if (NULL == file) +if (NULL == file || strlen(file) == 0) { #if LANG_ENG printf (" rm \n\r"); diff --git a/programs/system/shell/cmd/cmd_rmdir.c b/programs/system/shell/cmd/cmd_rmdir.c index d1b82ad783..688011385b 100644 --- a/programs/system/shell/cmd/cmd_rmdir.c +++ b/programs/system/shell/cmd/cmd_rmdir.c @@ -6,7 +6,7 @@ char temp[256]; kol_struct70 k70; unsigned result; -if (NULL == dir) +if (NULL == dir || strlen(dir) == 0) { #if LANG_ENG printf(" rmdir \n\r"); diff --git a/programs/system/shell/cmd/cmd_touch.c b/programs/system/shell/cmd/cmd_touch.c index 36aa55f6f1..6a65004753 100644 --- a/programs/system/shell/cmd/cmd_touch.c +++ b/programs/system/shell/cmd/cmd_touch.c @@ -6,7 +6,7 @@ kol_struct70 k70; char temp[256]; unsigned result; -if (NULL == file) +if (NULL == file || strlen(file) == 0) { #if LANG_ENG printf(" touch \n\r"); diff --git a/programs/system/shell/cmd/cmd_ver.c b/programs/system/shell/cmd/cmd_ver.c index 3561673d50..d906335b6a 100644 --- a/programs/system/shell/cmd/cmd_ver.c +++ b/programs/system/shell/cmd/cmd_ver.c @@ -14,7 +14,7 @@ if (!strcmp(param, "kernel")) vB = kvbuf+1; vC = kvbuf+2; vD = kvbuf+3; - Rev = kvbuf+5; + Rev = (unsigned*)(kvbuf + 5); #if LANG_ENG printf (" KolibriOS v%d.%d.%d.%d. Kernel SVN-rev.: %d\n\r", *vA, *vB, *vC, *vD, *Rev); diff --git a/programs/system/shell/globals.h b/programs/system/shell/globals.h index 0ff62c6635..177ace9d41 100644 --- a/programs/system/shell/globals.h +++ b/programs/system/shell/globals.h @@ -1,5 +1,5 @@ -#define SHELL_VERSION "0.7.4" +#define SHELL_VERSION "0.7.5" extern char PATH[256]; extern char PARAM[256]; @@ -14,7 +14,7 @@ unsigned ALIAS_NUM = 0; /// =========================================================== -#define CMD_HISTORY_NUM 10 +#define CMD_HISTORY_NUM 11 char CMD[256]; char CMD_HISTORY[CMD_HISTORY_NUM][256]; diff --git a/programs/system/shell/locale/eng/.shell b/programs/system/shell/locale/eng/.shell index b2f8874bcd..6cdceebe64 100644 --- a/programs/system/shell/locale/eng/.shell +++ b/programs/system/shell/locale/eng/.shell @@ -1,5 +1,6 @@ #SHS - -ver kernel -echo Type 'help' for help +echo +ver kernel +echo +echo Type 'help' for help echo diff --git a/programs/system/shell/locale/rus/.shell b/programs/system/shell/locale/rus/.shell index 0b636a7f1f..0b0791c270 100644 --- a/programs/system/shell/locale/rus/.shell +++ b/programs/system/shell/locale/rus/.shell @@ -1,5 +1,6 @@ #SHS - -ver kernel -echo ‚ўҐ¤ЁвҐ 'help' ¤«п бЇа ўЄЁ +echo +ver kernel +echo +echo ‚ўҐ¤ЁвҐ 'help' ¤«п бЇа ўЄЁ echo diff --git a/programs/system/shell/modules/module_command.c b/programs/system/shell/modules/module_command.c index 55b535d6e6..f687e43d9e 100644 --- a/programs/system/shell/modules/module_command.c +++ b/programs/system/shell/modules/module_command.c @@ -6,9 +6,11 @@ void command_history_add() int i; +if ('\0' == CMD[0]) return; + for (i = 0; i < CMD_HISTORY_NUM_REAL; i++) - if ( 0 == strcmp( CMD_HISTORY[i], CMD ) ) - return; + if ( 0 == strcmp( CMD_HISTORY[i], CMD ) ) + return; for (i = CMD_HISTORY_NUM_REAL; i > 0 ; i--) strcpy(CMD_HISTORY[i], CMD_HISTORY[i-1]); @@ -18,7 +20,7 @@ strcpy(CMD_HISTORY[0], CMD); if (CMD_HISTORY_NUM_REAL < CMD_HISTORY_NUM-1) CMD_HISTORY_NUM_REAL++; -CMD_NUM = 0; +CMD_NUM = -1; } @@ -48,41 +50,38 @@ for (;;) switch (key) { case 27: // ESC - for (i = cmdPos; i < cmdLen; i++) - printf(" "); - for (i = cmdLen; i > 0; i--) - printf("%c %c", 8, 8); - cmdLen = 0; - cmdPos = 0; - CMD[0] = '\0'; + for (i = cmdPos; i < cmdLen; i++) + printf(" "); + for (i = cmdLen; i > 0; i--) + printf("%c %c", 8, 8); + cmdLen = 0; + cmdPos = 0; + CMD[0] = '\0'; break; - case 13: // ENTER printf("\n\r"); command_history_add(); return; - case 8: // BACKSPACE if (cmdPos > 0) { - for (i = cmdPos-1; i < cmdLen; i++) - CMD[i] = CMD[i+1]; + for (i = cmdPos-1; i < cmdLen; i++) + CMD[i] = CMD[i+1]; + for (i = 0; i < cmdLen-cmdPos; i++) + printf (" "); - for (i = 0; i < cmdLen-cmdPos; i++) - printf (" "); - - for (i = 0; i < cmdLen; i++) - printf ("%c %c", 8, 8); + for (i = 0; i < cmdLen; i++) + printf ("%c %c", 8, 8); printf("%s", CMD); - for (i = 0; i < cmdLen-cmdPos; i++) - printf("%c", 8); + for (i = 0; i < cmdLen-cmdPos; i++) + printf("%c", 8); - cmdPos--; - cmdLen--; + cmdPos--; + cmdLen--; } break; @@ -102,14 +101,14 @@ for (;;) if ((int)*(clipBuf+4)==0) // text? { if ((int)*(clipBuf+8)==1) // 866 encoding? - - for (i = cmdPos; i < cmdLen; i++) - printf(" "); - for (i = cmdLen; i > 0; i--) - printf("%c %c", 8, 8); - cmdLen = 0; - cmdPos = 0; - CMD[0] = '\0'; + { + for (i = cmdPos; i < cmdLen; i++) + printf(" "); + for (i = cmdLen; i > 0; i--) + printf("%c %c", 8, 8); + cmdLen = 0; + cmdPos = 0; + CMD[0] = '\0'; // strcpy_n for (i = 0; i < 255; i++) @@ -128,6 +127,7 @@ for (;;) printf("%s", CMD); } + } } } break; @@ -147,7 +147,7 @@ for (;;) kol_clip_set(12+cmdLen, clipCopy); } - break; + break; default: @@ -175,59 +175,57 @@ for (;;) cmdPos++; cmdLen++; } - break; + break; } } - else + else + { + key = (key>>8)&0xff; + switch (key) { - key = (key>>8)&0xff; - switch (key) - { - case 83: // Del - if (cmdPos < cmdLen) - { - for (i = cmdPos; i < cmdLen; i++) - CMD[i] = CMD[i+1]; + case 83: // Del + if (cmdPos < cmdLen) + { + for (i = cmdPos; i < cmdLen; i++) + CMD[i] = CMD[i+1]; - for (i = 0; i < cmdLen-cmdPos; i++) - printf(" "); + for (i = 0; i < cmdLen-cmdPos; i++) + printf(" "); - for (i = 0; i < cmdLen-cmdPos; i++) - printf("%c", 8); + for (i = 0; i < cmdLen-cmdPos; i++) + printf("%c", 8); - for (i = cmdPos; i < cmdLen; i++) - printf("%c", CMD[i]); + for (i = cmdPos; i < cmdLen; i++) + printf("%c", CMD[i]); - for (i = 0; i < cmdLen-cmdPos; i++) - printf("%c", 8); + for (i = 0; i < cmdLen-cmdPos; i++) + printf("%c", 8); - cmdLen--; - } + cmdLen--; + } + break; - break; - - case 75: // Left - if (cmdPos > 0) - { - printf("%c", 8); - cmdPos--; - } - break; + case 75: // Left + if (cmdPos > 0) + { + printf("%c", 8); + cmdPos--; + } + break; - case 77: // Right - if (cmdPos < cmdLen) - { - printf("%c", CMD[cmdPos]); - cmdPos++; - } - break; + case 77: // Right + if (cmdPos < cmdLen) + { + printf("%c", CMD[cmdPos]); + cmdPos++; + } + break; - case 80: // Down - - if (CMD_HISTORY_NUM_REAL > 0) + case 72: // Up + if (CMD_HISTORY_NUM_REAL > 0 && CMD_NUM >= -1) { for (i = cmdPos; i < cmdLen; i++) @@ -236,12 +234,12 @@ for (;;) for (i = cmdLen; i > 0; i--) printf("%c %c", 8, 8); - if (CMD_NUM < CMD_HISTORY_NUM_REAL-1) - CMD_NUM++; - else + if (CMD_NUM < CMD_HISTORY_NUM_REAL-1) + CMD_NUM++; +/* else CMD_NUM = 0; - - printf( "%s", CMD_HISTORY[CMD_NUM] ); +*/ + printf("%s", CMD_HISTORY[CMD_NUM]); strcpy(CMD, CMD_HISTORY[CMD_NUM]); cmdLen = strlen(CMD); cmdPos = strlen(CMD); @@ -251,8 +249,8 @@ for (;;) break; - case 72: // Up - if (CMD_HISTORY_NUM_REAL > 0) + case 80: // Down + if (CMD_HISTORY_NUM_REAL > 0 && CMD_NUM >= 0) { for (i = cmdPos; i < cmdLen; i++) @@ -261,12 +259,12 @@ for (;;) for (i = cmdLen; i > 0; i--) printf("%c %c", 8, 8); - if (CMD_NUM > 0) - CMD_NUM--; - else + if (CMD_NUM > 0) + CMD_NUM--; +/* else CMD_NUM = CMD_HISTORY_NUM_REAL-1; - - printf( "%s", CMD_HISTORY[CMD_NUM] ); +*/ + printf("%s", CMD_HISTORY[CMD_NUM]); strcpy(CMD, CMD_HISTORY[CMD_NUM]); cmdLen = strlen(CMD); cmdPos = strlen(CMD); @@ -278,10 +276,10 @@ for (;;) case 0: // console window closed cmd_exit(NULL); - } + } - } - } + } + } } @@ -296,41 +294,41 @@ if (CMD[0]=='"') quote = 1; if (quote == 0) - { - for (i=0;;i++) - { - cmd[i] = CMD[i]; - if (0 == cmd[i]) - return i; - if ( iswhite(cmd[i]) ) + { + for (i=0;;i++) { - cmd[i] = '\0'; - break; + cmd[i] = CMD[i]; + if (0 == cmd[i]) + return i; + if ( iswhite(cmd[i]) ) + { + cmd[i] = '\0'; + break; + } } + return i+1; } - return i+1; - } - else - { - len = 0; - for (i=1;;i++) - { - cmd[len] = CMD[i]; - if (0 == cmd[len]) +else + { + len = 0; + for (i=1;;i++) { - i--; - break; + cmd[len] = CMD[i]; + if (0 == cmd[len]) + { + i--; + break; + } + if ( cmd[len] == '"' ) + { + cmd[len] = '\0'; + break; + } + len++; } - if ( cmd[len] == '"' ) - { - cmd[len] = '\0'; - break; - } - len++; + trim(cmd); + return i+1; } - trim(cmd); - return i+1; - } } /// =========================================================== @@ -361,14 +359,14 @@ for (i = 0; i < NUM_OF_CMD; i++) if (!strcmp(cmd, COMMANDS[i].name)) { result = ((handler1_t)COMMANDS[i].handler)(args); - if (result != TRUE) - { - #if LANG_ENG - printf(" Error!\n\r"); - #elif LANG_RUS - printf(" ЋиЁЎЄ !\n\r"); - #endif - } + if (result != TRUE) + { + #if LANG_ENG + printf(" Error!\n\r"); + #elif LANG_RUS + printf(" ЋиЁЎЄ !\n\r"); + #endif + } return; } } diff --git a/programs/system/shell/system/kolibri.c b/programs/system/shell/system/kolibri.c index 31753d7bbb..035b2ce763 100644 --- a/programs/system/shell/system/kolibri.c +++ b/programs/system/shell/system/kolibri.c @@ -58,13 +58,13 @@ asm volatile ("int $0x40"::"a"(11)); } -void __attribute__((__always_inline__)) kol_paint_start() +inline void __attribute__((__always_inline__)) kol_paint_start() { asm volatile ("int $0x40"::"a"(12), "b"(1)); } -void __attribute__((__always_inline__)) kol_paint_end() +inline void __attribute__((__always_inline__)) kol_paint_end() { asm volatile ("int $0x40"::"a"(12), "b"(2)); } @@ -347,7 +347,7 @@ switch (*fname) -void __attribute__((__always_inline__)) kol_screen_wait_rr() +inline void __attribute__((__always_inline__)) kol_screen_wait_rr() { asm volatile ("int $0x40"::"a"(18), "b"(14)); }