Shell 0.4.5: Multilanguage, russification, some new commands (see History.txt for details)

git-svn-id: svn://kolibrios.org@1668 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Nasarus 2010-10-20 23:58:36 +00:00
parent 1c4f4e9d68
commit 4b4d896f8a
33 changed files with 375 additions and 56 deletions

View File

@ -0,0 +1,102 @@
Shell 0.4.5 // 19.10.2010 // Pterox
=======================================
Программа теперь многоязыковая (английский, и русский язык). Программа полностью русифицированна.
* Команда "free" перименована в "memory" - для точности.
* Добавлены команды turnoff (выключить компьютер), kerver (версия ядра KoOS), uptime; reboot теперь может перезагружать ядро ("reboot kernel")
Shell 0.4.4 // 20.08.2010 // Albom
=======================================
1) шелл корректно завершается при закрытии окна
2) исправлено ещё 2 ошибки
3) добавлены 2 команды:
* sleep - ждать. параметр - время в сотых частях секунды. только целое число.
* ccpuid - вывод в консоль информации (пока скудно) о процессоре. пользы мало, но давно хотел с командой cpuid разобраться (в следующем семестре буду студентам курс читать, включил разбор команды в программу).
есть много идей. некоторые легко реализуются, некоторые сложнее. если интересно:
1) добавить переменную (одну!), в которую будет результат в текстовой форме (не то что возвращает ф-ция) записываться. с ней можно будет работать из командной строки.
2) внедрить простую стековую машину для вычислений с вещественными числами.
Shell 0.4.3 // 20.08.2010 // Albom
=======================================
* Смесь версий 0.4.1 и 0.4.2. Теперь в архиве все исходные файлы, необходимые для компиляции (раньше использовались объектники с моими обёртками, исходники я с шеллом не выкладывал)
Shell 0.4.2 // 28.08.2009 // diamond
=======================================
* Добавил корректное завершение работы при закрытии окна консоли, работает только начиная с последней на данный момент версией библиотеки (лежит на svn, включена в ночную сборку). Перекомпилировал в VS2008 с LTCG, ещё пошаманил с оптимизацией по размеру.
Shell 0.4.1 // 16.03.2009 // Albom
=======================================
* версия с исправленными ошибками.
* работает команда alias, добавлена команда clear.
Shell 0.4 // 12.08.2008 // Albom
=======================================
1) Работает схема псевдонимов (до 256 команд)
- просмотр по команде alias (без параметров)
- добавление псевдонима команды с клавиатуры или в скрипте (в том числе и .shell): alias новая команда = старая команда
- команды регистрозависимые, поэтому поклонникам ДОС придётся внести в .shell строки такого вида
alias dir = ls
alias DIR = ls
alias Dir = ls
alias DIr = ls
и т.д.
- встроенные команды переназвать невозможно, например, бессмысленна команда:
alias ls=somecommand
- при отладке получал странную информацию, но так как у меня всё работает, то пока изменений вносить не планирую
2) Теперь шелл можно запускать с параметром (из самого себя, например).
- синтаксис:
shell команда
- пример:
shell /sys/somescript
- при этом .shell не запускается
3) Реализована команда more. ( MEMENTO MORI! - Моментально... в море! )
- просмотр текстовых и бинарных файлов (вроде бы задача простая, но пришлось повозиться с управляющими символами)
- очень не рекомендуется просматривать большие файлы
Shell 0.3 // 07.08.2008 // Albom
=======================================
1) Возможность запуска скриптов.
* каждая строка должна представляет собой команду
* строкой считается набор символов, который заканчивается CR+LF (Windows) или LF(UNIX) или CR(Mac)
* если строка начинается с #, то вся строка (т.е. комментарий) игнорируется
* скрипт должен начитаться с #SHS
* при запуске шелла автоматически запускается скрипт .shell
2) История из 5 (можно изменить при компиляции) введённых команд.
* перемещение по истории - UP/DOWN
3) Команда alias, которая позволяет вводить синонимы для команд.
* до 256 (можно изменить при компиляции) синонимов
* пока работает только добавление и просмотр синонимов, а отработка пока не реализована.
Shell 0.2 // 04.08.2008 // Albom
=======================================
* добавил новые функции
* написал собственную процедуру ввода команды
Shell 0.11 // 01.08.2008 // Albom
=======================================
* Добавил команды free и reboot, внёс некоторые изменения, исправил найденные ошибки.
Shell 0.1 // 29.07.2008 // Albom
=======================================
* Реализованы (не полностью) команды: about, cd, date, echo, exit, help, kill, ls, ps, pwd, ver
* При запуске программы (если не указан полный путь) она ищется в каталоге /rd/1 и текущем каталоге.
Shell 0.02 // 27.07.2008 // Albom
=======================================
* Реализовал команды:
exit - выход
ls (с параметром и без) - вывод списка директории
pwd - текущий каталог
ps - список процессов и их PID
kill - завершить процесс по PID
help (с параметром и без) - помощь
Shell 0.01 // 27.07.2008 // Albom
=======================================
* Решил написать функциональный шелл на Си с использованием console.obj.
* Пока сделал функцию отделения команды и параметров, а также реализовал команды help (пока без параметров), ver и exit.

View File

@ -1,6 +1,8 @@
/// =========================================================== /// ===========================================================
#include "lang.h"
#include "system/boolean.h" #include "system/boolean.h"
#include "system/kolibri.h" #include "system/kolibri.h"
#include "system/stdlib.h" #include "system/stdlib.h"
@ -22,7 +24,7 @@
#include "cmd/cmd_date.c" #include "cmd/cmd_date.c"
#include "cmd/cmd_exit.c" #include "cmd/cmd_exit.c"
#include "cmd/cmd_cd.c" #include "cmd/cmd_cd.c"
#include "cmd/cmd_free.c" #include "cmd/cmd_memory.c"
#include "cmd/cmd_reboot.c" #include "cmd/cmd_reboot.c"
#include "cmd/cmd_mkdir.c" #include "cmd/cmd_mkdir.c"
#include "cmd/cmd_rmdir.c" #include "cmd/cmd_rmdir.c"
@ -33,6 +35,9 @@
#include "cmd/cmd_clear.c" #include "cmd/cmd_clear.c"
#include "cmd/cmd_ccpuid.c" #include "cmd/cmd_ccpuid.c"
#include "cmd/cmd_sleep.c" #include "cmd/cmd_sleep.c"
#include "cmd/cmd_turnoff.c"
#include "cmd/cmd_kerver.c"
#include "cmd/cmd_uptime.c"
#include "modules/module_command.c" #include "modules/module_command.c"
#include "modules/module_program.c" #include "modules/module_program.c"

Binary file not shown.

View File

@ -0,0 +1,5 @@
#SHS
about
echo ‚¢¥¤¨â¥ 'help' ¤«ï á¯à ¢ª¨
echo

Binary file not shown.

Binary file not shown.

View File

@ -1,2 +0,0 @@
del shell.kex
del *.o

View File

@ -2,6 +2,7 @@
int cmd_about(char param[]) int cmd_about(char param[])
{ {
#if LANG_ENG
char message[] = { char message[] = {
"\ "\
\n\r\ \n\r\
@ -11,6 +12,17 @@ version %s\n\r\n\r\
e-mail: albom85@yandex.ru\n\r\ e-mail: albom85@yandex.ru\n\r\
site: http://albom85.narod.ru/\n\r\n\r\ site: http://albom85.narod.ru/\n\r\n\r\
"}; "};
#elif LANG_RUS
char message[] = {
"\
\n\r\
Shell ¤«ï KolibriOS\n\r\
¢¥àá¨ï %s\n\r\n\r\
 ¢â®à: «¥ªá ­¤à <EFBFBD>®£®¬ § aka Albom\n\r\
e-mail: albom85@yandex.ru\n\r\
á ©â: http://albom85.narod.ru/\n\r\n\r\
"};
#endif
printf(message, SHELL_VERSION); printf(message, SHELL_VERSION);
return TRUE; return TRUE;

View File

@ -7,7 +7,11 @@ unsigned result;
if (NULL == dir) if (NULL == dir)
{ {
printf(" cd directory\n\r"); #if LANG_ENG
printf(" cd <directory>\n\r");
#elif LANG_RUS
printf(" cd <äèðåêòîðèÿ>\n\r");
#endif
return FALSE; return FALSE;
} }

View File

@ -6,7 +6,11 @@ unsigned date;
unsigned time; unsigned time;
date = kol_system_date_get(); date = kol_system_date_get();
printf(" date [dd.mm.yy]: %x%x.%x%x.%x%x", #if LANG_ENG
printf(" Date [dd.mm.yy]: %x%x.%x%x.%x%x",
#elif LANG_RUS
printf(" <20><><EFBFBD><EFBFBD> [い.<2E>.<2E>]: %x%x.%x%x.%x%x",
#endif
(date&0xf00000)>>20, (date&0xf0000)>>16, // day (date&0xf00000)>>20, (date&0xf0000)>>16, // day
(date&0xf000)>>12, (date&0xf00)>>8, //month (date&0xf000)>>12, (date&0xf00)>>8, //month
(date&0xf0)>>4, (date&0xf) ); // year (date&0xf0)>>4, (date&0xf) ); // year
@ -14,7 +18,11 @@ printf(" date [dd.mm.yy]: %x%x.%x%x.%x%x",
time = kol_system_time_get(); time = kol_system_time_get();
printf("\n\r time [hh:mm:ss]: %x%x:%x%x:%x%x\n\r", #if LANG_ENG
printf("\n\r Time [hh:mm:ss]: %x%x:%x%x:%x%x\n\r",
#elif LANG_RUS
printf("\n\r <20><EFBFBD> [艸:<3A>:瘁]: %x%x:%x%x:%x%x\n\r",
#endif
(time&0xf0)>>4, (time&0xf), // hours (time&0xf0)>>4, (time&0xf), // hours
(time&0xf000)>>12, (time&0xf00)>>8, // minutes (time&0xf000)>>12, (time&0xf00)>>8, // minutes
(time&0xf00000)>>20, (time&0xf0000)>>16 ); // seconds (time&0xf00000)>>20, (time&0xf0000)>>16 ); // seconds

View File

@ -4,7 +4,11 @@ int cmd_help(char cmd[])
int i; int i;
char available[]={" %d commands available:\n\r"}; #if LANG_ENG
char available[]={" %d commands available:\n\r"};
#elif LANG_RUS
char available[]={" Š®«-¢® ¤®áâ㯭ëå ª®¬ ­¤: %d\n\r"};
#endif
if ( !strlen(cmd) ) if ( !strlen(cmd) )
{ {
@ -22,7 +26,11 @@ else
return TRUE; return TRUE;
} }
#if LANG_ENG
printf (" Command \'%s\' not found.\n\r", cmd); printf (" Command \'%s\' not found.\n\r", cmd);
#elif LANG_RUS
printf (" Š®¬ ­¤  \'%s\' ­¥ ­ ©¤¥­ .\n\r", cmd);
#endif
printf (available, NUM_OF_CMD); printf (available, NUM_OF_CMD);
for (i = 0; i < NUM_OF_CMD; i++) for (i = 0; i < NUM_OF_CMD; i++)
printf(" %s\n\r", COMMANDS[i].name); printf(" %s\n\r", COMMANDS[i].name);

View File

@ -0,0 +1,27 @@
int cmd_kerver(char param[])
{
char *kvbuf;
char *vA, *vB, *vC, *vD;
unsigned *Rev;
kvbuf = malloc(16);
kol_get_kernel_ver(kvbuf);
vA = kvbuf+0;
vA = *vA;
vB = kvbuf+1;
vB = *vB;
vC = kvbuf+2;
vC = *vC;
vD = kvbuf+3;
vD = *vD;
Rev = kvbuf+5;
Rev = *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 (" Š®«¨¡à¨Ž‘ v%d.%d.%d.%d. SVN-ॢ. ï¤à : %d\n\r", vA, vB, vC, vD, Rev);
#endif
free(kvbuf);
return TRUE;
}

View File

@ -24,7 +24,7 @@ int result;
if (NULL == process) if (NULL == process)
{ {
printf(" kill PID\n\r"); printf(" kill <PID>\n\r");
return FALSE; return FALSE;
} }
else else

View File

@ -0,0 +1,18 @@
int cmd_memory(char param[])
{
unsigned total, free, used;
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
total, total/1024, free, free/1024, (free*100)/total, used, total/1024-free/1024, 100-(free*100)/total );
return TRUE;
}

View File

@ -8,7 +8,11 @@ unsigned result;
if (NULL == dir) if (NULL == dir)
{ {
printf(" mkdir directory\n\r"); #if LANG_ENG
printf(" mkdir <directory>\n\r");
#elif LANG_RUS
printf(" mkdir <え爛<E38188><E7889B><EFBFBD>>\n\r");
#endif
return FALSE; return FALSE;
} }

View File

@ -5,13 +5,17 @@ int cmd_more(char file[])
kol_struct70 k70; kol_struct70 k70;
kol_struct_BDVK bdvk; kol_struct_BDVK bdvk;
unsigned result, filesize, pos, i; unsigned result, filesize, pos, i;
char buf[81]; //áóôåğ char buf[81]; //¡ãä¥à
char temp[256]; char temp[256];
unsigned flags; unsigned flags;
if (NULL == file) if (NULL == file)
{ {
printf (" less filename\n\r"); #if LANG_ENG
printf (" more <filename>\n\r");
#elif LANG_RUS
printf (" more <¨¬ï ä ©« >\n\r");
#endif
return FALSE; return FALSE;
} }
@ -41,11 +45,11 @@ k70.p16 = &bdvk;
k70.p20 = 0; k70.p20 = 0;
k70.p21 = temp; k70.p21 = temp;
result = kol_file_70(&k70); // ïîëó÷àåì èíôîğìàöèş î ôàéëå result = kol_file_70(&k70); // ¯®«ãç ¥¬ ¨­ä®à¬ æ¨î ® ä ©«¥
if ( 0 != result ) if ( 0 != result )
return FALSE; return FALSE;
filesize = bdvk.p32[0]; // ïîëó÷àåì ğàçìåğ ôàéëà filesize = bdvk.p32[0]; // ¯®«ãç ¥¬ à §¬¥à ä ©« 
buf[80]=0; buf[80]=0;
flags = con_get_flags(); flags = con_get_flags();
@ -63,7 +67,7 @@ for (pos=0;pos<filesize;pos+=80)
k70.p20 = 0; k70.p20 = 0;
k70.p21 = temp; k70.p21 = temp;
result = kol_file_70(&k70); // ÷òåíèå 80 ñèìâîëîâ result = kol_file_70(&k70); // ç⥭¨¥ 80 ᨬ¢®«®¢
for (i=0; i<80; i++) for (i=0; i<80; i++)
{ {

View File

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

View File

@ -8,7 +8,11 @@ unsigned result;
if (NULL == file) if (NULL == file)
{ {
printf (" rm filename\n\r"); #if LANG_ENG
printf (" rm <filename>\n\r");
#elif LANG_RUS
printf (" rm <¨¬ï ä ©« >\n\r");
#endif
return FALSE; return FALSE;
} }

View File

@ -8,7 +8,11 @@ unsigned result;
if (NULL == dir) if (NULL == dir)
{ {
printf(" rmdir directory\n\r"); #if LANG_ENG
printf(" rmdir <directory>\n\r");
#elif LANG_ENG
printf(" rmdir <え爛<E38188><E7889B><EFBFBD>>\n\r");
#endif
return FALSE; return FALSE;
} }

View File

@ -8,7 +8,11 @@ unsigned result;
if (NULL == file) if (NULL == file)
{ {
printf(" touch filename\n\r"); #if LANG_ENG
printf(" touch <filename>\n\r");
#elif LANG_RUS
printf(" touch <¨¬ï ä ©« >\n\r");
#endif
return FALSE; return FALSE;
} }

View File

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

View File

@ -0,0 +1,19 @@
int cmd_uptime(char param[])
{
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;
#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;
}

View File

@ -1,3 +1,6 @@
@echo off
erase shell.kex lang.h
echo #define LANG_ENG 1 > lang.h
fasm start.asm start.o fasm start.asm start.o
gcc -c shell.c gcc -c shell.c
gcc -c system/kolibri.c gcc -c system/kolibri.c
@ -5,5 +8,8 @@ gcc -c system/stdlib.c
gcc -c system/string.c gcc -c system/string.c
ld -nostdlib -T kolibri.ld -o shell.kex start.o kolibri.o stdlib.o string.o shell.o ld -nostdlib -T kolibri.ld -o shell.kex start.o kolibri.o stdlib.o string.o shell.o
objcopy shell.kex -O binary objcopy shell.kex -O binary
erase lang.h start.o shell.o kolibri.o stdlib.o string.o
kpack shell.kex kpack shell.kex
move shell.kex bin\eng\
copy locale\eng\.shell bin\eng\
pause pause

View File

@ -0,0 +1,15 @@
@echo off
erase shell.kex lang.h
echo #define LANG_RUS 1 > lang.h
fasm start.asm start.o
gcc -c shell.c
gcc -c system/kolibri.c
gcc -c system/stdlib.c
gcc -c system/string.c
ld -nostdlib -T kolibri.ld -o shell.kex start.o kolibri.o stdlib.o string.o shell.o
objcopy shell.kex -O binary
erase lang.h start.o shell.o kolibri.o stdlib.o string.o
kpack shell.kex
move shell.kex bin\rus\
copy locale\rus\.shell bin\rus\
pause

View File

@ -1,5 +1,5 @@
#define SHELL_VERSION "0.4.4" #define SHELL_VERSION "0.4.5"
extern char PATH[256]; extern char PATH[256];
extern char PARAM[256]; extern char PARAM[256];
@ -49,7 +49,7 @@ int cmd_clear(char arg[]);
int cmd_date(char arg[]); int cmd_date(char arg[]);
int cmd_echo(char text[]); int cmd_echo(char text[]);
int cmd_exit(char arg[]); int cmd_exit(char arg[]);
int cmd_free(char arg[]); int cmd_memory(char arg[]);
int cmd_help(char cmd[]); int cmd_help(char cmd[]);
int cmd_kill(char process[]); int cmd_kill(char process[]);
int cmd_ls(char dir[]); int cmd_ls(char dir[]);
@ -63,34 +63,17 @@ int cmd_rmdir(char dir[]);
int cmd_touch(char file[]); int cmd_touch(char file[]);
int cmd_ver(char arg[]); int cmd_ver(char arg[]);
int cmd_sleep(char arg[]); int cmd_sleep(char arg[]);
int cmd_turnoff(char arg[]);
int cmd_kerver(char arg[]);
int cmd_uptime(char param[]);
/// =========================================================== /// ===========================================================
const command_t COMMANDS[]= #if LANG_ENG
{ #include "locale/eng/globals.h"
{"about", " Displays information about the program\n\r", &cmd_about}, #elif LANG_RUS
{"alias", " Allows the user view the current aliases\n\r", &cmd_alias}, #include "locale/rus/globals.h"
{"ccpuid"," Displays CPU information\n\r", &cmd_ccpuid}, #endif
{"cd", " Changes directories\n\r", &cmd_cd},
{"clear", " Clears the display\n\r", &cmd_clear},
{"date", " Returns the date and time\n\r", &cmd_date},
{"echo", " Echoes the data to the screen\n\r", &cmd_echo},
{"exit", " Exits program\n\r", &cmd_exit},
{"free", " Displays total, free and used memory\n\r", &cmd_free},
{"help", " Gives help\n\r", &cmd_help},
{"kill", " Stops a running process\n\r", &cmd_kill},
{"ls", " Lists the files in a directory\n\r", &cmd_ls},
{"mkdir", " Makes directory\n\r", &cmd_mkdir},
{"more", " Displays a data file to the screen\n\r", &cmd_more},
{"ps", " Lists the current processes running\n\r", &cmd_ps},
{"pwd", " Displays the name of the working directory\n\r", &cmd_pwd},
{"reboot"," Reboots the computer\n\r", &cmd_reboot},
{"rm", " Removes files\n\r", &cmd_rm},
{"rmdir", " Removes directories\n\r", &cmd_rmdir},
{"sleep", " Stops the shell for the desired period\n\r", &cmd_sleep},
{"touch", " Creates an empty file or updates the time/date stamp on a file\n\r", &cmd_touch},
{"ver", " Displays version\n\r", &cmd_ver},
};
/// =========================================================== /// ===========================================================

View File

@ -0,0 +1,28 @@
const command_t COMMANDS[]=
{
{"about", " Displays information about Shell\n\r", &cmd_about},
{"alias", " Allows the user view the current aliases\n\r", &cmd_alias},
{"ccpuid", " Displays CPU information\n\r", &cmd_ccpuid},
{"cd", " Changes current directory. Usage:\n\r cd <directory name>\n\r", &cmd_cd},
{"clear", " Clears the screen\n\r", &cmd_clear},
{"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},
{"exit", " Exits from Shell\n\r", &cmd_exit},
{"memory", " Displays total, free and used memory\n\r", &cmd_memory},
{"help", " Gives help on commands. Usage:\n\r help ;it lists all builtins\n\r help <command> ;help on command\n\r", &cmd_help},
{"kerver", " Displays the information about a version of KoOS kernel\n\r", &cmd_kerver},
{"kill", " Stops a running process. Usage:\n\r kill <PID of process>\n\r", &cmd_kill},
{"ls", " Lists the files in a directory. Usage:\n\r ls ;lists the files in current directory\n\r ls <directory> ;lists the files at specified folder\n\r", &cmd_ls},
{"mkdir", " Makes directory. Usage:\n\r mkdir <folder name> ;creates the folder in working directory\n\r mkdir <path><folder name> ;create folder by specified path\n\r", &cmd_mkdir},
{"more", " Displays a file data to the screen. Usage:\n\r more <file name>\n\r", &cmd_more},
{"ps", " Lists the current processes running\n\r", &cmd_ps},
{"pwd", " Displays the name of the working directory\n\r", &cmd_pwd},
{"reboot", " Reboots the computer or KoOS kernel. Usage:\n\r reboot ;reboot a PC\n\r reboot kernel ;reboot the KoOS kernel\n\r", &cmd_reboot},
{"rm", " Removes a file. Usage:\n\r rm file name>\n\r", &cmd_rm},
{"rmdir", " Removes a folder. Usage:\n\r rmdir <directory>\n\r", &cmd_rmdir},
{"sleep", " Stops the shell for the desired period. Usage:\n\r sleep <time in the 1/100 of second>\n\r Example:\n\r sleep 500 ;pause for 5sec.\n\r", &cmd_sleep},
{"touch", " Creates an empty file or updates the time/date stamp on a file. Usage:\n\r touch <file name>\n\r", &cmd_touch},
{"turnoff"," Turns off the computer\n\r", &cmd_turnoff},
{"uptime", " Displays the uptime", &cmd_uptime},
{"ver", " Displays version of Shell\n\r", &cmd_ver},
};

View File

@ -0,0 +1,5 @@
#SHS
about
echo ‚¢¥¤¨â¥ 'help' ¤«ï á¯à ¢ª¨
echo

View File

@ -0,0 +1,28 @@
const command_t COMMANDS[]=
{
{"about", " ‚뢮¤¨â ¨­ä®à¬ æ¨î ® ¯à®£à ¬¬¥ Shell\n\r", &cmd_about},
{"alias", " <20>®ª §ë¢ ¥â ᯨ᮪ alias'®¢\n\r", &cmd_alias},
{"ccpuid", " ‚뢮¤¨â ¨­ä®à¬ æ¨î ® CPU\n\r", &cmd_ccpuid},
{"cd", " ˆ§¬¥­ï¥â ⥪ãéãî ¤¥à¨ªâ®à¨î. ˆá¯®«ì§®¢ ­¨¥:\n\r cd <¤¨à¥ªâ®à¨ï>\n\r", &cmd_cd},
{"clear", " Žç¨é ¥â íªà ­\n\r", &cmd_clear},
{"date", " <20>®ª §ë¢ ¥â ⥪ãéãî ¤ âã ¨ ¢à¥¬ï\n\r", &cmd_date},
{"echo", " ‚뢮¤¨â ¤ ­­ë¥ ­  íªà ­. ˆá¯®«ì§®¢ ­¨¥:\n\r echo <¤ ­­ë¥>\n\r", &cmd_echo},
{"exit", " ‚ë室 ¨§ ª®­á®«¨\n\r", &cmd_exit},
{"memory", " <20>®ª §ë¢ ¥â ®¡êñ¬ ¯ ¬ïâ¨: ¢á¥©, ᢮¡®¤­®© ¨ ¨á¯®«ì§ã¥¬®©\n\r", &cmd_memory},
{"help", " ‘¯à ¢ª  ¯® ª®¬ ­¤ ¬. ˆá¯®«ì§®¢ ­¨¥:\n\r help ;ᯨ᮪ ¢á¥å ª®¬ ­¤\n\r help <ª®¬ ­¤ > ;á¯à ¢ª  ¯® ª®¬ ­¤¥\n\r", &cmd_help},
{"kerver", " ‚뢮¤¨â ¨­ä®à¬ æ¨î ® ¢¥àᨨ ï¤à  KoOS\n\r", &cmd_kerver},
{"kill", " “¡¨¢ ¥â ¯à®æ¥áá. ˆá¯®«ì§®¢ ­¨¥:\n\r kill <PID ¯à®æ¥áá >\n\r", &cmd_kill},
{"ls", " ‚뢮¤¨â ᯨ᮪ ä ©«®¢. ˆá¯®«ì§®¢ ­¨¥:\n\r ls ;ᯨ᮪ ä ©«®¢ ¢ ⥪ã饬 ª â «®£¥\n\r ls <¤¨à¥ªâ®à¨ï> ;ᯨ᮪ ä ©«®¢ ¨§ § ¤ ­­®© ¤¨à¥ªâ®à¨¨\n\r", &cmd_ls},
{"mkdir", " ‘®§¤ ¥â ª â «®£. ˆá¯®«ì§®¢ ­¨¥:\n\r mkdir <¨¬ï ¯ ¯ª¨> ;ᮧ¤ âì ¯ ¯ªã ¢ ⥪ã饬 ª â «®£¥\n\r mkdir <¯ãâì><¨¬ï ¯ ¯ª¨> ;ᮧ¤ âì ¯ ¯ªã ¯® 㪠§ ­­®¬ã ¯ãâ¨\n\r", &cmd_mkdir},
{"more", " ‚뢮¤¨â ᮤ¥à¦¨¬®¥ ä ©«  ­  íªà ­. ˆá¯®«ì§®¢ ­¨¥:\n\r more <¨¬ï ä ©« >\n\r", &cmd_more},
{"ps", " ‚뢮¤¨â ᯨ᮪ ¯à®æ¥áᮢ\n\r", &cmd_ps},
{"pwd", " <20>®ª §ë¢ ¥â ¨¬ï ⥪ã饩 ¤¨à¥ªâ®à¨¨\n\r", &cmd_pwd},
{"reboot", " <20>¥à¥§ £à㦠¥â ª®¬¯ìîâ¥à ¨«¨ ï¤à® KoOS. ˆá¯®«ì§®¢ ­¨¥:\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},
{"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},
{"turnoff"," ‚몫î砥⠪®¬¯ìîâ¥à\n\r", &cmd_turnoff},
{"uptime", " <20>®ª §ë¢ ¥â uptime", &cmd_uptime},
{"ver", " <20>®ª §ë¢ ¥â ¢¥àá¨î Shell' \n\r", &cmd_ver},
};

View File

@ -5,14 +5,18 @@ int executable_run(char cmd[], char args[])
{ {
char exec[256]; char exec[256];
char error_starting[]={" No such command '%s'.\n\r"}; #if LANG_ENG
char error_starting[]={" No such command '%s'.\n\r"};
#elif LANG_RUS
char error_starting[]={" <20>¥ â ª®© ª®¬ ­¤ë - '%s'.\n\r"};
#endif
int result; int result;
if ( '/' == cmd[0]) // если путь абсолбтный if ( '/' == cmd[0]) // ¥á«¨ ¯ãâì  ¡á®«¡â­ë©
{ {
strcpy(exec, cmd); strcpy(exec, cmd);
if ( !file_check(exec) ) // проверяем существование файла if ( !file_check(exec) ) // ¯à®¢¥à塞 áãé¥á⢮¢ ­¨¥ ä ©« 
{ {
printf(error_starting, cmd); printf(error_starting, cmd);
return FALSE; return FALSE;
@ -21,14 +25,14 @@ if ( '/' == cmd[0]) //
else else
{ {
strcpy(exec, cur_dir); // проверяем файл в текущем каталоге strcpy(exec, cur_dir); // ¯à®¢¥à塞 ä ©« ¢ ⥪ã饬 ª â «®£¥
strcat(exec, cmd); strcat(exec, cmd);
if ( !file_check(exec) ) // проверяем существование файла if ( !file_check(exec) ) // ¯à®¢¥à塞 áãé¥á⢮¢ ­¨¥ ä ©« 
{ {
strcpy(exec, "/rd/1/"); // проверяем файл на виртуальном диске strcpy(exec, "/rd/1/"); // ¯à®¢¥à塞 ä ©« ­  ¢¨àâã «ì­®¬ ¤¨áª¥
strcat(exec, cmd); strcat(exec, cmd);
if ( !file_check(exec) ) // проверяем существование файла if ( !file_check(exec) ) // ¯à®¢¥à塞 áãé¥á⢮¢ ­¨¥ ä ©« 
{ {
printf(error_starting, cmd); printf(error_starting, cmd);
return FALSE; return FALSE;
@ -42,11 +46,15 @@ if ( script_check(exec) )
return script_run(exec, args); return script_run(exec, args);
} }
/* запуск программы */ /* § ¯ã᪠¯à®£à ¬¬ë */
result = program_run(exec, args); result = program_run(exec, args);
if (result > 0) if (result > 0)
{ {
#if LANG_ENG
printf (" '%s' started. PID = %d\n\r", cmd, result); printf (" '%s' started. PID = %d\n\r", cmd, result);
#elif LANG_RUS
printf (" '%s' § ¯ã饭. PID = %d\n\r", cmd, result);
#endif
return TRUE; return TRUE;
} }
else else

View File

@ -410,3 +410,8 @@ int kol_process_kill_pid(unsigned process)
{ {
asm ("int $0x40"::"a"(18), "b"(18), "c"(process)); asm ("int $0x40"::"a"(18), "b"(18), "c"(process));
} }
void kol_get_kernel_ver(char buff16b[])
{
asm ("int $0x40"::"a"(18), "b"(13), "c"(buff16b));
}

View File

@ -88,3 +88,4 @@ unsigned kol_time_tick();
unsigned kol_sound_speaker(char data[]); unsigned kol_sound_speaker(char data[]);
unsigned kol_process_info(unsigned slot, char buf1k[]); unsigned kol_process_info(unsigned slot, char buf1k[]);
int kol_process_kill_pid(unsigned process); int kol_process_kill_pid(unsigned process);
void kol_get_kernel_ver(char buff16b[]);