forked from KolibriOS/kolibrios
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:
parent
1c4f4e9d68
commit
4b4d896f8a
102
programs/system/shell/History.txt
Normal file
102
programs/system/shell/History.txt
Normal 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.
|
||||||
|
|
@ -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"
|
||||||
|
BIN
programs/system/shell/bin/eng/shell.kex
Normal file
BIN
programs/system/shell/bin/eng/shell.kex
Normal file
Binary file not shown.
5
programs/system/shell/bin/rus/.shell
Normal file
5
programs/system/shell/bin/rus/.shell
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#SHS
|
||||||
|
|
||||||
|
about
|
||||||
|
echo ‚¢¥¤¨â¥ 'help' ¤«ï á¯à ¢ª¨
|
||||||
|
echo
|
BIN
programs/system/shell/bin/rus/shell.kex
Normal file
BIN
programs/system/shell/bin/rus/shell.kex
Normal file
Binary file not shown.
Binary file not shown.
@ -1,2 +0,0 @@
|
|||||||
del shell.kex
|
|
||||||
del *.o
|
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
27
programs/system/shell/cmd/cmd_kerver.c
Normal file
27
programs/system/shell/cmd/cmd_kerver.c
Normal 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;
|
||||||
|
}
|
@ -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
|
||||||
|
18
programs/system/shell/cmd/cmd_memory.c
Normal file
18
programs/system/shell/cmd/cmd_memory.c
Normal 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;
|
||||||
|
}
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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++)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
6
programs/system/shell/cmd/cmd_turnoff.c
Normal file
6
programs/system/shell/cmd/cmd_turnoff.c
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
int cmd_turnoff(char param[])
|
||||||
|
{
|
||||||
|
kol_system_end(2);
|
||||||
|
return TRUE;
|
||||||
|
}
|
19
programs/system/shell/cmd/cmd_uptime.c
Normal file
19
programs/system/shell/cmd/cmd_uptime.c
Normal 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;
|
||||||
|
}
|
@ -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
|
15
programs/system/shell/compile_rus.bat
Normal file
15
programs/system/shell/compile_rus.bat
Normal 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
|
@ -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},
|
|
||||||
};
|
|
||||||
|
|
||||||
/// ===========================================================
|
/// ===========================================================
|
||||||
|
|
||||||
|
28
programs/system/shell/locale/eng/globals.h
Normal file
28
programs/system/shell/locale/eng/globals.h
Normal 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},
|
||||||
|
};
|
5
programs/system/shell/locale/rus/.shell
Normal file
5
programs/system/shell/locale/rus/.shell
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#SHS
|
||||||
|
|
||||||
|
about
|
||||||
|
echo ‚¢¥¤¨â¥ 'help' ¤«ï á¯à ¢ª¨
|
||||||
|
echo
|
28
programs/system/shell/locale/rus/globals.h
Normal file
28
programs/system/shell/locale/rus/globals.h
Normal 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},
|
||||||
|
};
|
@ -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
|
||||||
|
@ -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));
|
||||||
|
}
|
@ -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[]);
|
Loading…
Reference in New Issue
Block a user