forked from KolibriOS/kolibrios
Shell v0.6. See History.txt.
git-svn-id: svn://kolibrios.org@3245 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
0da906311f
commit
4ed6be1119
@ -1,3 +1,17 @@
|
|||||||
|
|
||||||
|
Shell 0.6 // 16.02.2013 // Albom
|
||||||
|
+ Добавлена возможность запускать программы, имена которых или путь к которым содержат пробелы. Имя программы (возможно с путём к ней) для этого необходимо заключать в кавычки. Т.е. наконец-то можно запустить программу из /rd/1/File managers, не переходя в неё
|
||||||
|
+ Добавлена функция разделения строковой переменной на int argc, char* argv[], что означает возможность улучшения команд (обработка нескольких параметров)
|
||||||
|
+ Добавлена команда cp (копирование файла). Принимает обязательно два параметра - имя файла-источника и имя файла-результата. Имена могут быть краткими (в текущем каталоге), так и с полным путём (должны начинаться с /). Ограничение на размер файла - 4 Гбайта
|
||||||
|
* Исправлена кодировка в сообщении об ошибке в консольном приложении
|
||||||
|
* Клавиши истории (вверх и вниз) поменяны между собой
|
||||||
|
* Количество команд в истории увеличено с пяти до десяти
|
||||||
|
* Уменьшено количество предупреждений при компиляции
|
||||||
|
* Команда ccpuid преобразована в параметр cpu команды ver
|
||||||
|
* Исправления в пакетных файлах сборки
|
||||||
|
+ Добавлен пример консольного приложения на ассемблере и пакетный файл для его сборки
|
||||||
|
|
||||||
|
|
||||||
Shell 0.5.4 // 04.06.2012 // Albom
|
Shell 0.5.4 // 04.06.2012 // Albom
|
||||||
=======================================
|
=======================================
|
||||||
* Исправлен интерфейс исполняемых консольных приложений. Теперь они должны создавать буфер с именем pid-SHELL, где pid - идентификатор процесса без заглавных нулей
|
* Исправлен интерфейс исполняемых консольных приложений. Теперь они должны создавать буфер с именем pid-SHELL, где pid - идентификатор процесса без заглавных нулей
|
||||||
@ -47,7 +61,7 @@ Shell 0.4.5 // 19.10.2010 // Pterox
|
|||||||
=======================================
|
=======================================
|
||||||
Программа теперь многоязыковая (английский, и русский язык). Программа полностью русифицированна.
|
Программа теперь многоязыковая (английский, и русский язык). Программа полностью русифицированна.
|
||||||
* Команда "free" переименована в "memory" - для точности.
|
* Команда "free" переименована в "memory" - для точности.
|
||||||
* Добавлены команды turnoff (выключить компьютер), kerver (версия ядра KoOS), uptime; reboot теперь может перезагружать ядро ("reboot kernel")
|
* Добавлены команды turnoff (выключить компьютер), kerver (версия ядра KolibriOS), uptime; reboot теперь может перезагружать ядро ("reboot kernel")
|
||||||
|
|
||||||
|
|
||||||
Shell 0.4.4 // 20.08.2010 // Albom
|
Shell 0.4.4 // 20.08.2010 // Albom
|
||||||
@ -59,8 +73,8 @@ Shell 0.4.4 // 20.08.2010 // Albom
|
|||||||
* ccpuid - вывод в консоль информации (пока скудно) о процессоре. пользы мало, но давно хотел с командой cpuid разобраться (в следующем семестре буду студентам курс читать, включил разбор команды в программу).
|
* ccpuid - вывод в консоль информации (пока скудно) о процессоре. пользы мало, но давно хотел с командой cpuid разобраться (в следующем семестре буду студентам курс читать, включил разбор команды в программу).
|
||||||
|
|
||||||
есть много идей. некоторые легко реализуются, некоторые сложнее. если интересно:
|
есть много идей. некоторые легко реализуются, некоторые сложнее. если интересно:
|
||||||
1) добавить переменную (одну!), в которую будет результат в текстовой форме (не то что возвращает ф-ция) записываться. с ней можно будет работать из командной строки.
|
1) добавить переменную (одну!), в которую будет результат в текстовой форме (не то что возвращает функция) записываться. с ней можно будет работать из командной строки
|
||||||
2) внедрить простую стековую машину для вычислений с вещественными числами.
|
2) внедрить простую стековую машину для вычислений с вещественными числами
|
||||||
|
|
||||||
|
|
||||||
Shell 0.4.3 // 20.08.2010 // Albom
|
Shell 0.4.3 // 20.08.2010 // Albom
|
||||||
@ -70,7 +84,7 @@ Shell 0.4.3 // 20.08.2010 // Albom
|
|||||||
|
|
||||||
Shell 0.4.2 // 28.08.2009 // diamond
|
Shell 0.4.2 // 28.08.2009 // diamond
|
||||||
=======================================
|
=======================================
|
||||||
* Добавил корректное завершение работы при закрытии окна консоли, работает только начиная с последней на данный момент версией библиотеки (лежит на svn, включена в ночную сборку). Перекомпилировал в VS2008 с LTCG, ещё пошаманил с оптимизацией по размеру.
|
* Добавил корректное завершение работы при закрытии окна консоли, работает только начиная с последней на данный момент версией библиотеки (лежит на svn, включена в ночную сборку). Перекомпилировал в VS2008 с LTCG, ещё пошаманил с оптимизацией по размеру
|
||||||
|
|
||||||
|
|
||||||
Shell 0.4.1 // 16.03.2009 // Albom
|
Shell 0.4.1 // 16.03.2009 // Albom
|
||||||
@ -94,33 +108,33 @@ alias DIr = ls
|
|||||||
alias ls=somecommand
|
alias ls=somecommand
|
||||||
- при отладке получал странную информацию, но так как у меня всё работает, то пока изменений вносить не планирую
|
- при отладке получал странную информацию, но так как у меня всё работает, то пока изменений вносить не планирую
|
||||||
|
|
||||||
2) Теперь шелл можно запускать с параметром (из самого себя, например).
|
2) Теперь шелл можно запускать с параметром (из самого себя, например)
|
||||||
- синтаксис:
|
- синтаксис:
|
||||||
shell команда
|
shell команда
|
||||||
- пример:
|
- пример:
|
||||||
shell /sys/somescript
|
shell /sys/somescript
|
||||||
- при этом .shell не запускается
|
- при этом .shell не запускается
|
||||||
|
|
||||||
3) Реализована команда more. ( MEMENTO MORI! - Моментально... в море! )
|
3) Реализована команда more
|
||||||
- просмотр текстовых и бинарных файлов (вроде бы задача простая, но пришлось повозиться с управляющими символами)
|
- просмотр текстовых и бинарных файлов (вроде бы задача простая, но пришлось повозиться с управляющими символами)
|
||||||
- очень не рекомендуется просматривать большие файлы
|
- очень не рекомендуется просматривать большие файлы
|
||||||
|
|
||||||
|
|
||||||
Shell 0.3 // 07.08.2008 // Albom
|
Shell 0.3 // 07.08.2008 // Albom
|
||||||
=======================================
|
=======================================
|
||||||
1) Возможность запуска скриптов.
|
1) Возможность запуска скриптов
|
||||||
* каждая строка должна представляет собой команду
|
* каждая строка должна представляет собой команду
|
||||||
* строкой считается набор символов, который заканчивается CR+LF (Windows) или LF(UNIX) или CR(Mac)
|
* строкой считается набор символов, который заканчивается CR+LF (Windows) или LF(UNIX) или CR(Mac)
|
||||||
* если строка начинается с #, то вся строка (т.е. комментарий) игнорируется
|
* если строка начинается с #, то вся строка (т.е. комментарий) игнорируется
|
||||||
* скрипт должен начитаться с #SHS
|
* скрипт должен начитаться с #SHS
|
||||||
* при запуске шелла автоматически запускается скрипт .shell
|
* при запуске шелла автоматически запускается скрипт .shell
|
||||||
|
|
||||||
2) История из 5 (можно изменить при компиляции) введённых команд.
|
2) История из 5 (можно изменить при компиляции) введённых команд
|
||||||
* перемещение по истории - UP/DOWN
|
* перемещение по истории - UP/DOWN
|
||||||
|
|
||||||
3) Команда alias, которая позволяет вводить синонимы для команд.
|
3) Команда alias, которая позволяет вводить синонимы для команд
|
||||||
* до 256 (можно изменить при компиляции) синонимов
|
* до 256 (можно изменить при компиляции) синонимов
|
||||||
* пока работает только добавление и просмотр синонимов, а отработка пока не реализована.
|
* пока работает только добавление и просмотр синонимов, а отработка пока не реализована
|
||||||
|
|
||||||
|
|
||||||
Shell 0.2 // 04.08.2008 // Albom
|
Shell 0.2 // 04.08.2008 // Albom
|
||||||
@ -131,13 +145,13 @@ Shell 0.2 // 04.08.2008 // Albom
|
|||||||
|
|
||||||
Shell 0.11 // 01.08.2008 // Albom
|
Shell 0.11 // 01.08.2008 // Albom
|
||||||
=======================================
|
=======================================
|
||||||
* Добавил команды free и reboot, внёс некоторые изменения, исправил найденные ошибки.
|
* Добавил команды free и reboot, внёс некоторые изменения, исправил найденные ошибки
|
||||||
|
|
||||||
|
|
||||||
Shell 0.1 // 29.07.2008 // Albom
|
Shell 0.1 // 29.07.2008 // Albom
|
||||||
=======================================
|
=======================================
|
||||||
* Реализованы (не полностью) команды: about, cd, date, echo, exit, help, kill, ls, ps, pwd, ver
|
* Реализованы (не полностью) команды: about, cd, date, echo, exit, help, kill, ls, ps, pwd, ver
|
||||||
* При запуске программы (если не указан полный путь) она ищется в каталоге /rd/1 и текущем каталоге.
|
* При запуске программы (если не указан полный путь) она ищется в каталоге /rd/1 и текущем каталоге
|
||||||
|
|
||||||
|
|
||||||
Shell 0.02 // 27.07.2008 // Albom
|
Shell 0.02 // 27.07.2008 // Albom
|
||||||
@ -153,6 +167,6 @@ Shell 0.02 // 27.07.2008 // Albom
|
|||||||
|
|
||||||
Shell 0.01 // 27.07.2008 // Albom
|
Shell 0.01 // 27.07.2008 // Albom
|
||||||
=======================================
|
=======================================
|
||||||
* Решил написать функциональный шелл на Си с использованием console.obj.
|
* Решил написать функциональный шелл на Си с использованием console.obj
|
||||||
* Пока сделал функцию отделения команды и параметров, а также реализовал команды help (пока без параметров), ver и exit.
|
* Пока сделал функцию отделения команды и параметров, а также реализовал команды help (пока без параметров), ver и exit
|
||||||
|
|
||||||
|
@ -37,12 +37,12 @@
|
|||||||
#include "cmd/cmd_alias.c"
|
#include "cmd/cmd_alias.c"
|
||||||
#include "cmd/cmd_more.c"
|
#include "cmd/cmd_more.c"
|
||||||
#include "cmd/cmd_clear.c"
|
#include "cmd/cmd_clear.c"
|
||||||
#include "cmd/cmd_ccpuid.c"
|
|
||||||
#include "cmd/cmd_sleep.c"
|
#include "cmd/cmd_sleep.c"
|
||||||
#include "cmd/cmd_shutdown.c"
|
#include "cmd/cmd_shutdown.c"
|
||||||
#include "cmd/cmd_uptime.c"
|
#include "cmd/cmd_uptime.c"
|
||||||
#include "cmd/cmd_killall.c"
|
#include "cmd/cmd_killall.c"
|
||||||
#include "cmd/cmd_history.c"
|
#include "cmd/cmd_history.c"
|
||||||
|
#include "cmd/cmd_cp.c"
|
||||||
|
|
||||||
#include "modules/module_command.c"
|
#include "modules/module_command.c"
|
||||||
#include "modules/module_program_console.c"
|
#include "modules/module_program_console.c"
|
||||||
@ -50,5 +50,6 @@
|
|||||||
#include "modules/module_script.c"
|
#include "modules/module_script.c"
|
||||||
#include "modules/module_executable.c"
|
#include "modules/module_executable.c"
|
||||||
#include "modules/module_alias.c"
|
#include "modules/module_alias.c"
|
||||||
|
#include "modules/module_parameters.c"
|
||||||
|
|
||||||
/// ===========================================================
|
/// ===========================================================
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
|
|
||||||
int cmd_ccpuid(char param[])
|
|
||||||
{
|
|
||||||
unsigned a, b, c, d;
|
|
||||||
char str[13];
|
|
||||||
|
|
||||||
str[12] = '\0';
|
|
||||||
|
|
||||||
asm ("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[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;
|
|
||||||
|
|
||||||
printf("%s\n\r", str);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
189
programs/system/shell/cmd/cmd_cp.c
Normal file
189
programs/system/shell/cmd/cmd_cp.c
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
|
||||||
|
void print_error(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
#if LANG_ENG
|
||||||
|
printf(" Error!\n\r");
|
||||||
|
#elif LANG_RUS
|
||||||
|
printf(" Žè¨¡ª !\n\r");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int cmd_cp(char param[])
|
||||||
|
{
|
||||||
|
|
||||||
|
char* argv[100];
|
||||||
|
int i;
|
||||||
|
int argc;
|
||||||
|
char *filename_in;
|
||||||
|
char *filename_out;
|
||||||
|
char *buffer;
|
||||||
|
|
||||||
|
kol_struct70 k70_in;
|
||||||
|
kol_struct70 k70_out;
|
||||||
|
|
||||||
|
kol_struct_BDVK bdvk;
|
||||||
|
|
||||||
|
unsigned filesize, result;
|
||||||
|
unsigned n; // ª®«¨ç¥á⢮ à § ª®¯¨à®¢ ¨ï ¯® 4 ª¡ ©â
|
||||||
|
|
||||||
|
argc = parameters_prepare(param, argv);
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
{
|
||||||
|
#if LANG_ENG
|
||||||
|
printf(" cp <file_in> <file_out>\n\r");
|
||||||
|
#elif LANG_RUS
|
||||||
|
printf(" cp <¨áâ®ç¨ª> <१ã«ìâ â>\n\r");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
parameters_free(argc, argv);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
filename_in = (char*) malloc(4096);
|
||||||
|
filename_out = (char*) malloc(4096);
|
||||||
|
|
||||||
|
if (argv[0][0] != '/')
|
||||||
|
{
|
||||||
|
strcpy(filename_in, cur_dir);
|
||||||
|
if (filename_in[strlen(filename_in)-1] != '/')
|
||||||
|
strcat(filename_in, "/"); // add slash
|
||||||
|
strcat(filename_in, argv[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strcpy(filename_in, argv[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv[1][0] != '/')
|
||||||
|
{
|
||||||
|
strcpy(filename_out, cur_dir);
|
||||||
|
if (filename_out[strlen(filename_out)-1] != '/')
|
||||||
|
strcat(filename_out, "/"); // add slash
|
||||||
|
strcat(filename_out, argv[1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strcpy(filename_out, argv[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
k70_in.p00 = 5;
|
||||||
|
k70_in.p04 = k70_in.p08 = k70_in.p12 = 0;
|
||||||
|
k70_in.p16 = (unsigned) &bdvk;
|
||||||
|
k70_in.p20 = 0;
|
||||||
|
k70_in.p21 = filename_in;
|
||||||
|
|
||||||
|
result = kol_file_70(&k70_in); // ¯®«ãç ¥¬ ¨ä®à¬ æ¨î ® ä ©«¥
|
||||||
|
if ( 0 != result )
|
||||||
|
{
|
||||||
|
print_error();
|
||||||
|
|
||||||
|
parameters_free(argc, argv);
|
||||||
|
free(filename_in);
|
||||||
|
free(filename_out);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
filesize = bdvk.p32[0]; // ¯®«ãç ¥¬ à §¬¥à ä ©« (®£à ¨ç¥¨¥ - 4 ƒ¡ ©â )
|
||||||
|
n = filesize / 4096;
|
||||||
|
|
||||||
|
buffer = (char*) malloc(4096);
|
||||||
|
|
||||||
|
k70_in.p00 = 0;
|
||||||
|
k70_in.p08 = 0;
|
||||||
|
k70_in.p12 = 4096;
|
||||||
|
k70_in.p16 = (unsigned) buffer;
|
||||||
|
k70_in.p20 = 0;
|
||||||
|
k70_in.p21 = filename_in;
|
||||||
|
|
||||||
|
k70_out.p00 = 2;
|
||||||
|
k70_out.p08 = 0;
|
||||||
|
k70_out.p12 = 4096;
|
||||||
|
k70_out.p16 = (unsigned) buffer;
|
||||||
|
k70_out.p20 = 0;
|
||||||
|
k70_out.p21 = filename_out;
|
||||||
|
|
||||||
|
i = 0; // ¤«ï ⮣®, çâ®¡ë ª®¯¨à®¢ âì ä ©«ë á à §¬¥à®¬ ¬¥ìè¥ 4 ª<> ©â
|
||||||
|
for ( i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
k70_in.p04 = i*4096;
|
||||||
|
result = kol_file_70(&k70_in); // ç⥨¥
|
||||||
|
if (result != 0)
|
||||||
|
{
|
||||||
|
print_error();
|
||||||
|
|
||||||
|
parameters_free(argc, argv);
|
||||||
|
free(filename_in);
|
||||||
|
free(filename_out);
|
||||||
|
free(buffer);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
k70_out.p04 = i*4096;
|
||||||
|
result = kol_file_70(&k70_out); // § ¯¨áì
|
||||||
|
if (result != 0)
|
||||||
|
{
|
||||||
|
print_error();
|
||||||
|
|
||||||
|
parameters_free(argc, argv);
|
||||||
|
free(filename_in);
|
||||||
|
free(filename_out);
|
||||||
|
free(buffer);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
|
k70_out.p00 = 3; // ¬¥ï¥¬ äãªæ¨î á ᮧ¤ ¨ï (2) ¤®§ ¯¨áì (3)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( (filesize%4096) != 0 ) // ¥á«¨ à §¬¥à ä ©« ¥ ªà ⥠4 ª<> ©â ¬
|
||||||
|
{
|
||||||
|
|
||||||
|
k70_in.p12 = filesize%4096;
|
||||||
|
k70_out.p12 = filesize%4096;
|
||||||
|
|
||||||
|
k70_in.p04 = i*4096; // ¢ i ¤®«¦® ¡ëâì ¯à ¢¨«ì®¥ ᬥ饨¥
|
||||||
|
result = kol_file_70(&k70_in); // ç⥨¥
|
||||||
|
if (result != 0)
|
||||||
|
{
|
||||||
|
print_error();
|
||||||
|
|
||||||
|
parameters_free(argc, argv);
|
||||||
|
free(filename_in);
|
||||||
|
free(filename_out);
|
||||||
|
free(buffer);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
k70_out.p04 = i*4096;
|
||||||
|
result = kol_file_70(&k70_out); // § ¯¨áì
|
||||||
|
if (result != 0)
|
||||||
|
{
|
||||||
|
print_error();
|
||||||
|
|
||||||
|
parameters_free(argc, argv);
|
||||||
|
free(filename_in);
|
||||||
|
free(filename_out);
|
||||||
|
free(buffer);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
parameters_free(argc, argv);
|
||||||
|
free(filename_in);
|
||||||
|
free(filename_out);
|
||||||
|
free(buffer);
|
||||||
|
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
@ -1,21 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
int _atoi ( char *s )
|
|
||||||
{
|
|
||||||
int i, n;
|
|
||||||
|
|
||||||
n = 0;
|
|
||||||
for ( i = 0; s[i]!= '\0'; ++i)
|
|
||||||
if ((s[i]<'0') || (s[i]>'9'))
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
n = 10 * n + s[i] - '0';
|
|
||||||
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int cmd_kill(char process[])
|
int cmd_kill(char process[])
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ k70.p00 = 1;
|
|||||||
k70.p04 = 0;
|
k70.p04 = 0;
|
||||||
k70.p08 = 0;
|
k70.p08 = 0;
|
||||||
k70.p12 = 10000;
|
k70.p12 = 10000;
|
||||||
k70.p16 = malloc(32+k70.p12*560);
|
k70.p16 = (unsigned) malloc(32+k70.p12*560);
|
||||||
k70.p20 = 0;
|
k70.p20 = 0;
|
||||||
|
|
||||||
/// !!!
|
/// !!!
|
||||||
@ -27,23 +27,23 @@ else
|
|||||||
result = kol_file_70(&k70);
|
result = kol_file_70(&k70);
|
||||||
if ( !((result==0) || (result==6)) ) // ïðîâåðÿåì ñóùåñòâîâàíèå êàòàëîãà
|
if ( !((result==0) || (result==6)) ) // ïðîâåðÿåì ñóùåñòâîâàíèå êàòàëîãà
|
||||||
{
|
{
|
||||||
free(k70.p16);
|
free( (void*) k70.p16);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
n = k70.p16+8;
|
n = (unsigned*) (k70.p16+8);
|
||||||
num_of_file = *n; // ÷èñëî ôàéëîâ â êàòàëîãå
|
num_of_file = *n; // ÷èñëî ôàéëîâ â êàòàëîãå
|
||||||
|
|
||||||
for (i = 0; i < num_of_file; i++)
|
for (i = 0; i < num_of_file; i++)
|
||||||
{
|
{
|
||||||
printf (" %s", k70.p16+32+40+(264+40)*i);
|
printf (" %s", k70.p16+32+40+(264+40)*i);
|
||||||
t = k70.p16+32+(264+40)*i;
|
t = (unsigned*) (k70.p16+32+(264+40)*i);
|
||||||
type_of_file = *t;
|
type_of_file = *t;
|
||||||
if ( (0x10 == (type_of_file&0x10)) || (8 == (type_of_file&8)) )
|
if ( (0x10 == (type_of_file&0x10)) || (8 == (type_of_file&8)) )
|
||||||
printf ("/");
|
printf ("/");
|
||||||
printf ("\n\r");
|
printf ("\n\r");
|
||||||
}
|
}
|
||||||
|
|
||||||
free(k70.p16);
|
free((void*)k70.p16);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ else
|
|||||||
|
|
||||||
k70.p00 = 5;
|
k70.p00 = 5;
|
||||||
k70.p04 = k70.p08 = k70.p12 = 0;
|
k70.p04 = k70.p08 = k70.p12 = 0;
|
||||||
k70.p16 = &bdvk;
|
k70.p16 = (unsigned) &bdvk;
|
||||||
k70.p20 = 0;
|
k70.p20 = 0;
|
||||||
k70.p21 = temp;
|
k70.p21 = temp;
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ for (pos=0;pos<filesize;pos+=80)
|
|||||||
k70.p04 = pos;
|
k70.p04 = pos;
|
||||||
k70.p08 = 0;
|
k70.p08 = 0;
|
||||||
k70.p12 = 80;
|
k70.p12 = 80;
|
||||||
k70.p16 = buf;
|
k70.p16 = (unsigned) buf;
|
||||||
k70.p20 = 0;
|
k70.p20 = 0;
|
||||||
k70.p21 = temp;
|
k70.p21 = temp;
|
||||||
|
|
||||||
|
@ -10,25 +10,56 @@ if (!strcmp(param, "kernel"))
|
|||||||
kvbuf = malloc(16);
|
kvbuf = malloc(16);
|
||||||
kol_get_kernel_ver(kvbuf);
|
kol_get_kernel_ver(kvbuf);
|
||||||
vA = kvbuf+0;
|
vA = kvbuf+0;
|
||||||
vA = *vA;
|
|
||||||
vB = kvbuf+1;
|
vB = kvbuf+1;
|
||||||
vB = *vB;
|
|
||||||
vC = kvbuf+2;
|
vC = kvbuf+2;
|
||||||
vC = *vC;
|
|
||||||
vD = kvbuf+3;
|
vD = kvbuf+3;
|
||||||
vD = *vD;
|
|
||||||
Rev = kvbuf+5;
|
Rev = kvbuf+5;
|
||||||
Rev = *Rev;
|
|
||||||
|
|
||||||
#if LANG_ENG
|
#if LANG_ENG
|
||||||
printf (" KolibriOS v%d.%d.%d.%d. Kernel SVN-rev.: %d\n\r", vA, vB, vC, vD, Rev);
|
printf (" KolibriOS v%d.%d.%d.%d. Kernel SVN-rev.: %d\n\r", *vA, *vB, *vC, *vD, *Rev);
|
||||||
#elif LANG_RUS
|
#elif LANG_RUS
|
||||||
printf (" KolibriOS v%d.%d.%d.%d. SVN-ॢ. ï¤à : %d\n\r", vA, vB, vC, vD, Rev);
|
printf (" KolibriOS v%d.%d.%d.%d. SVN-ॢ. ï¤à : %d\n\r", *vA, *vB, *vC, *vD, *Rev);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
free(kvbuf);
|
free(kvbuf);
|
||||||
}
|
|
||||||
else
|
|
||||||
printf (" Shell v%s\n\r", SHELL_VERSION);
|
|
||||||
|
|
||||||
return TRUE;
|
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));
|
||||||
|
|
||||||
|
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[8] = (c&0x000000ff) >> 0;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
@echo off
|
@echo off
|
||||||
erase lang.h
|
|
||||||
echo #define LANG_ENG 1 > 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 -fno-builtin shell.c
|
||||||
gcc -c system/kolibri.c
|
gcc -c -fno-builtin system/kolibri.c
|
||||||
gcc -c system/stdlib.c
|
gcc -c -fno-builtin system/stdlib.c
|
||||||
gcc -c system/string.c
|
gcc -c -fno-builtin system/string.c
|
||||||
gcc -c system/ctype.c
|
gcc -c -fno-builtin system/ctype.c
|
||||||
ld -nostdlib -T kolibri.ld -o shell start.o kolibri.o stdlib.o string.o ctype.o shell.o
|
ld -nostdlib -T kolibri.ld -o shell start.o kolibri.o stdlib.o string.o ctype.o shell.o
|
||||||
objcopy shell -O binary
|
objcopy shell -O binary
|
||||||
erase lang.h start.o shell.o kolibri.o stdlib.o string.o
|
erase lang.h start.o shell.o kolibri.o stdlib.o string.o
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
@echo off
|
@echo off
|
||||||
erase lang.h
|
|
||||||
echo #define LANG_RUS 1 > lang.h
|
echo #define LANG_RUS 1 > lang.h
|
||||||
fasm start.asm start.o
|
fasm start.asm start.o
|
||||||
gcc -c shell.c
|
gcc -c -fno-builtin shell.c
|
||||||
gcc -c system/kolibri.c
|
gcc -c -fno-builtin system/kolibri.c
|
||||||
gcc -c system/stdlib.c
|
gcc -c -fno-builtin system/stdlib.c
|
||||||
gcc -c system/string.c
|
gcc -c -fno-builtin system/string.c
|
||||||
gcc -c system/ctype.c
|
gcc -c -fno-builtin system/ctype.c
|
||||||
ld -nostdlib -T kolibri.ld -o shell start.o kolibri.o stdlib.o string.o ctype.o shell.o
|
ld -nostdlib -T kolibri.ld -o shell start.o kolibri.o stdlib.o string.o ctype.o shell.o
|
||||||
objcopy shell -O binary
|
objcopy shell -O binary
|
||||||
erase lang.h start.o shell.o kolibri.o stdlib.o string.o ctype.o
|
erase lang.h start.o shell.o kolibri.o stdlib.o string.o ctype.o
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
@echo off
|
@echo off
|
||||||
fasm start.asm start.o
|
fasm start.asm start.o
|
||||||
gcc -c test.c
|
gcc -c -fno-builtin test.c
|
||||||
gcc -c system/kolibri.c
|
gcc -c -fno-builtin system/kolibri.c
|
||||||
gcc -c system/stdlib.c
|
gcc -c -fno-builtin system/stdlib.c
|
||||||
gcc -c system/string.c
|
gcc -c -fno-builtin system/string.c
|
||||||
gcc -c system/ctype.c
|
gcc -c -fno-builtin system/ctype.c
|
||||||
ld -nostdlib -T kolibri.ld -o test start.o kolibri.o stdlib.o string.o ctype.o test.o
|
ld -nostdlib -T kolibri.ld -o test start.o kolibri.o stdlib.o string.o ctype.o test.o
|
||||||
objcopy test -O binary
|
objcopy test -O binary
|
||||||
erase start.o kolibri.o stdlib.o string.o ctype.o test.o
|
erase start.o kolibri.o stdlib.o string.o ctype.o test.o
|
||||||
|
6
programs/system/shell/compile_test_asm.bat
Normal file
6
programs/system/shell/compile_test_asm.bat
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
@echo off
|
||||||
|
fasm test.asm test_asm
|
||||||
|
kpack test_asm
|
||||||
|
copy test_asm bin\eng\
|
||||||
|
move test_asm bin\rus\
|
||||||
|
pause
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
#define SHELL_VERSION "0.5.4"
|
#define SHELL_VERSION "0.6"
|
||||||
|
|
||||||
extern char PATH[256];
|
extern char PATH[256];
|
||||||
extern char PARAM[256];
|
extern char PARAM[256];
|
||||||
@ -14,7 +14,7 @@ unsigned ALIAS_NUM = 0;
|
|||||||
|
|
||||||
/// ===========================================================
|
/// ===========================================================
|
||||||
|
|
||||||
#define CMD_HISTORY_NUM 5
|
#define CMD_HISTORY_NUM 10
|
||||||
|
|
||||||
char CMD[256];
|
char CMD[256];
|
||||||
char CMD_HISTORY[CMD_HISTORY_NUM][256];
|
char CMD_HISTORY[CMD_HISTORY_NUM][256];
|
||||||
@ -44,7 +44,6 @@ typedef struct
|
|||||||
|
|
||||||
int cmd_about(char arg[]);
|
int cmd_about(char arg[]);
|
||||||
int cmd_alias(char arg[]);
|
int cmd_alias(char arg[]);
|
||||||
int cmd_ccpuid(char dir[]);
|
|
||||||
int cmd_cd(char dir[]);
|
int cmd_cd(char dir[]);
|
||||||
int cmd_clear(char arg[]);
|
int cmd_clear(char arg[]);
|
||||||
int cmd_date(char arg[]);
|
int cmd_date(char arg[]);
|
||||||
@ -68,6 +67,8 @@ int cmd_shutdown(char arg[]);
|
|||||||
int cmd_uptime(char param[]);
|
int cmd_uptime(char param[]);
|
||||||
int cmd_killall(char process_name[]);
|
int cmd_killall(char process_name[]);
|
||||||
int cmd_history(char arg[]);
|
int cmd_history(char arg[]);
|
||||||
|
int cmd_cp(char param[]);
|
||||||
|
|
||||||
|
|
||||||
/// ===========================================================
|
/// ===========================================================
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ const command_t COMMANDS[]=
|
|||||||
{
|
{
|
||||||
{"about", " Displays information about Shell\n\r", &cmd_about},
|
{"about", " Displays information about Shell\n\r", &cmd_about},
|
||||||
{"alias", " Allows the user view the current aliases\n\r", &cmd_alias},
|
{"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},
|
{"cd", " Changes current directory. Usage:\n\r cd <directory name>\n\r", &cmd_cd},
|
||||||
{"clear", " Clears the screen\n\r", &cmd_clear},
|
{"clear", " Clears the screen\n\r", &cmd_clear},
|
||||||
|
{"cp", " Copies file\n\r", &cmd_cp},
|
||||||
{"date", " Returns the current date and time\n\r", &cmd_date},
|
{"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},
|
{"echo", " Echoes the data to the screen. Usage:\n\r echo <data>\n\r", &cmd_echo},
|
||||||
{"exit", " Exits from Shell\n\r", &cmd_exit},
|
{"exit", " Exits from Shell\n\r", &cmd_exit},
|
||||||
@ -26,5 +26,5 @@ const command_t COMMANDS[]=
|
|||||||
{"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},
|
{"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},
|
{"touch", " Creates an empty file or updates the time/date stamp on a file. Usage:\n\r touch <file name>\n\r", &cmd_touch},
|
||||||
{"uptime", " Displays the uptime\n\r", &cmd_uptime},
|
{"uptime", " Displays the uptime\n\r", &cmd_uptime},
|
||||||
{"ver", " Displays version. Usage:\n\r ver ;Shell version\n\r ver kernel ;version of KolibriOS kernel\n\r", &cmd_ver},
|
{"ver", " Displays version. Usage:\n\r ver ;Shell version\n\r ver kernel ;version of KolibriOS kernel\n\r ver cpu ;information about CPU\n\r", &cmd_ver},
|
||||||
};
|
};
|
||||||
|
@ -3,9 +3,9 @@ const command_t COMMANDS[]=
|
|||||||
{
|
{
|
||||||
{"about", " ‚뢮¤¨â ¨ä®à¬ æ¨î ® ¯à®£à ¬¬¥ Shell\n\r", &cmd_about},
|
{"about", " ‚뢮¤¨â ¨ä®à¬ æ¨î ® ¯à®£à ¬¬¥ Shell\n\r", &cmd_about},
|
||||||
{"alias", " <20>®ª §ë¢ ¥â ¨ ¯®§¢®«ï¥â ¨§¬¥¨âì ᯨ᮪ ᨮ¨¬®¢ ª®¬ ¤\n\r", &cmd_alias},
|
{"alias", " <20>®ª §ë¢ ¥â ¨ ¯®§¢®«ï¥â ¨§¬¥¨âì ᯨ᮪ ᨮ¨¬®¢ ª®¬ ¤\n\r", &cmd_alias},
|
||||||
{"ccpuid", " ‚뢮¤¨â ¨ä®à¬ æ¨î ® CPU\n\r", &cmd_ccpuid},
|
|
||||||
{"cd", " ˆ§¬¥ï¥â ⥪ãéãî ¤¥à¨ªâ®à¨î. ˆá¯®«ì§®¢ ¨¥:\n\r cd <¤¨à¥ªâ®à¨ï>\n\r", &cmd_cd},
|
{"cd", " ˆ§¬¥ï¥â ⥪ãéãî ¤¥à¨ªâ®à¨î. ˆá¯®«ì§®¢ ¨¥:\n\r cd <¤¨à¥ªâ®à¨ï>\n\r", &cmd_cd},
|
||||||
{"clear", " Žç¨é ¥â íªà \n\r", &cmd_clear},
|
{"clear", " Žç¨é ¥â íªà \n\r", &cmd_clear},
|
||||||
|
{"cp", " Š®¯¨àã¥â ä ©«\n\r", &cmd_cp},
|
||||||
{"date", " <20>®ª §ë¢ ¥â ⥪ãéãî ¤ âã ¨ ¢à¥¬ï\n\r", &cmd_date},
|
{"date", " <20>®ª §ë¢ ¥â ⥪ãéãî ¤ âã ¨ ¢à¥¬ï\n\r", &cmd_date},
|
||||||
{"echo", " ‚뢮¤¨â ¤ ë¥ íªà . ˆá¯®«ì§®¢ ¨¥:\n\r echo <¤ ë¥>\n\r", &cmd_echo},
|
{"echo", " ‚뢮¤¨â ¤ ë¥ íªà . ˆá¯®«ì§®¢ ¨¥:\n\r echo <¤ ë¥>\n\r", &cmd_echo},
|
||||||
{"exit", " ‡ ¢¥à襨¥ à ¡®âë Shell\n\r", &cmd_exit},
|
{"exit", " ‡ ¢¥à襨¥ à ¡®âë Shell\n\r", &cmd_exit},
|
||||||
@ -26,5 +26,5 @@ const command_t COMMANDS[]=
|
|||||||
{"sleep", " Žáâ ¢«¨¢ ¥â à ¡®âã Shell' § ¤ ®¥ ¢à¥¬ï. ˆá¯®«ì§®¢ ¨¥:\n\r sleep <¨â¥à¢ « ¢ á®âëå ¤®«ï ᥪã¤ë>\n\r <20>ਬ¥à:\n\r sleep 500 ;¯ 㧠5 ᥪ.\n\r", &cmd_sleep},
|
{"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},
|
{"touch", " ‘®§¤ ñâ ¯ãá⮩ ä ©« ¨«¨ ¨§¬¥ï¥â ¤ âã/¢à¥¬ï ᮧ¤ ¨ï ä ©« . ˆá¯®«ì§®¢ ¨¥:\n\r touch <¨¬ï ä ©« >\n\r", &cmd_touch},
|
||||||
{"uptime", " <20>®ª §ë¢ ¥â uptime\n\r", &cmd_uptime},
|
{"uptime", " <20>®ª §ë¢ ¥â uptime\n\r", &cmd_uptime},
|
||||||
{"ver", " <20>®ª §ë¢ ¥â ¢¥àá¨î. ˆá¯®«ì§®¢ ¨¥:\n\r ver ;¢¥àá¨ï Shell\n\r ver kernel ;¢¥àá¨ï ¨ ®¬¥à ॢ¨§¨¨ ï¤à KolibriOS\n\r", &cmd_ver},
|
{"ver", " <20>®ª §ë¢ ¥â ¢¥àá¨î. ˆá¯®«ì§®¢ ¨¥:\n\r ver ;¢¥àá¨ï Shell\n\r ver kernel ;¢¥àá¨ï ¨ ®¬¥à ॢ¨§¨¨ ï¤à KolibriOS\n\r ver cpu ;¨ä®à¬ æ¨ï ® ¯à®æ¥áá®à¥\n\r", &cmd_ver},
|
||||||
};
|
};
|
||||||
|
@ -17,9 +17,19 @@ if ( (0 != strcmp( CMD_HISTORY[0], CMD)) &&
|
|||||||
(0 != strcmp( CMD_HISTORY[1], CMD)) &&
|
(0 != strcmp( CMD_HISTORY[1], CMD)) &&
|
||||||
(0 != strcmp( CMD_HISTORY[2], CMD)) &&
|
(0 != strcmp( CMD_HISTORY[2], CMD)) &&
|
||||||
(0 != strcmp( CMD_HISTORY[3], CMD)) &&
|
(0 != strcmp( CMD_HISTORY[3], CMD)) &&
|
||||||
(0 != strcmp( CMD_HISTORY[4], CMD)) )
|
(0 != strcmp( CMD_HISTORY[4], CMD)) &&
|
||||||
|
(0 != strcmp( CMD_HISTORY[5], CMD)) &&
|
||||||
|
(0 != strcmp( CMD_HISTORY[6], CMD)) &&
|
||||||
|
(0 != strcmp( CMD_HISTORY[7], CMD)) &&
|
||||||
|
(0 != strcmp( CMD_HISTORY[8], CMD)) &&
|
||||||
|
(0 != strcmp( CMD_HISTORY[9], CMD)) )
|
||||||
|
|
||||||
{
|
{
|
||||||
|
strcpy(CMD_HISTORY[9], CMD_HISTORY[8]);
|
||||||
|
strcpy(CMD_HISTORY[8], CMD_HISTORY[7]);
|
||||||
|
strcpy(CMD_HISTORY[7], CMD_HISTORY[6]);
|
||||||
|
strcpy(CMD_HISTORY[6], CMD_HISTORY[5]);
|
||||||
|
strcpy(CMD_HISTORY[5], CMD_HISTORY[4]);
|
||||||
strcpy(CMD_HISTORY[4], CMD_HISTORY[3]);
|
strcpy(CMD_HISTORY[4], CMD_HISTORY[3]);
|
||||||
strcpy(CMD_HISTORY[3], CMD_HISTORY[2]);
|
strcpy(CMD_HISTORY[3], CMD_HISTORY[2]);
|
||||||
strcpy(CMD_HISTORY[2], CMD_HISTORY[1]);
|
strcpy(CMD_HISTORY[2], CMD_HISTORY[1]);
|
||||||
@ -100,7 +110,7 @@ for (;;)
|
|||||||
switch (key)
|
switch (key)
|
||||||
{
|
{
|
||||||
|
|
||||||
case 72: // UP
|
case 80: // Down
|
||||||
for (hist = 0; hist < CMD_HISTORY_NUM; hist++)
|
for (hist = 0; hist < CMD_HISTORY_NUM; hist++)
|
||||||
{
|
{
|
||||||
command_clear();
|
command_clear();
|
||||||
@ -118,7 +128,7 @@ for (;;)
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 80: // DOWN
|
case 72: // Up
|
||||||
for (hist = 0; hist < CMD_HISTORY_NUM; hist++)
|
for (hist = 0; hist < CMD_HISTORY_NUM; hist++)
|
||||||
{
|
{
|
||||||
command_clear();
|
command_clear();
|
||||||
@ -150,7 +160,14 @@ for (;;)
|
|||||||
|
|
||||||
int command_get_cmd(char cmd[])
|
int command_get_cmd(char cmd[])
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i, len;
|
||||||
|
int quote = 0;
|
||||||
|
|
||||||
|
if (CMD[0]=='"')
|
||||||
|
quote = 1;
|
||||||
|
|
||||||
|
if (quote == 0)
|
||||||
|
{
|
||||||
for (i=0;;i++)
|
for (i=0;;i++)
|
||||||
{
|
{
|
||||||
cmd[i] = CMD[i];
|
cmd[i] = CMD[i];
|
||||||
@ -167,6 +184,28 @@ for (i=0;;i++)
|
|||||||
}
|
}
|
||||||
return i+1;
|
return i+1;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
len = 0;
|
||||||
|
for (i=1;;i++)
|
||||||
|
{
|
||||||
|
cmd[len] = CMD[i];
|
||||||
|
if (0 == cmd[len])
|
||||||
|
{
|
||||||
|
len = -2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ( cmd[len] == '"' )
|
||||||
|
{
|
||||||
|
cmd[len] = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
trim(cmd);
|
||||||
|
return len+2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// ===========================================================
|
/// ===========================================================
|
||||||
|
|
||||||
|
91
programs/system/shell/modules/module_parameters.c
Normal file
91
programs/system/shell/modules/module_parameters.c
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
|
||||||
|
/// ===========================================================
|
||||||
|
|
||||||
|
int parameters_prepare(char *param, char* argv[])
|
||||||
|
{
|
||||||
|
|
||||||
|
int i, param_len;
|
||||||
|
int argc = 1;
|
||||||
|
int quote = 0;
|
||||||
|
int argv_len;
|
||||||
|
|
||||||
|
param_len = strlen(param);
|
||||||
|
if ( param_len == 0 )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
argv[0] = (char*) malloc(4096);
|
||||||
|
|
||||||
|
argv_len = 0;
|
||||||
|
for (i = 0; i < param_len; i++)
|
||||||
|
{
|
||||||
|
switch (param[i])
|
||||||
|
{
|
||||||
|
case '"':
|
||||||
|
if (quote == 0)
|
||||||
|
quote = 1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
quote = 0;
|
||||||
|
argv[argc-1][argv_len] = '\0';
|
||||||
|
argc++;
|
||||||
|
argv[argc-1] = (char*) malloc(4096);
|
||||||
|
argv[argc-1][argv_len] = '\0';
|
||||||
|
argv_len = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 9:
|
||||||
|
case 32:
|
||||||
|
if (quote == 0)
|
||||||
|
{
|
||||||
|
if ( ( param[i+1] != 32) || ( param[i+1] != 9) )
|
||||||
|
{
|
||||||
|
if (argv_len != 0)
|
||||||
|
{
|
||||||
|
argv[argc-1][argv_len] = '\0';
|
||||||
|
argc++;
|
||||||
|
argv[argc-1] = (char*) malloc(4096);
|
||||||
|
argv[argc-1][argv_len] = '\0';
|
||||||
|
argv_len = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argv[argc-1][argv_len] = param[i];
|
||||||
|
argv_len++;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
argv[argc-1][argv_len] = param[i];
|
||||||
|
argv_len++;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
argv[argc-1][argv_len] = '\0';
|
||||||
|
|
||||||
|
if ( strlen(argv[argc-1]) == 0 )
|
||||||
|
{
|
||||||
|
free(argv[argc-1]);
|
||||||
|
argc--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return argc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ===========================================================
|
||||||
|
|
||||||
|
void parameters_free(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < argc; i++)
|
||||||
|
free(argv[i]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ===========================================================
|
@ -6,7 +6,7 @@ kol_struct70 k70;
|
|||||||
|
|
||||||
k70.p00 = 7;
|
k70.p00 = 7;
|
||||||
k70.p04 = 0;
|
k70.p04 = 0;
|
||||||
k70.p08 = param;
|
k70.p08 = (unsigned) param;
|
||||||
k70.p12 = 0;
|
k70.p12 = 0;
|
||||||
k70.p16 = 0;
|
k70.p16 = 0;
|
||||||
k70.p20 = 0;
|
k70.p20 = 0;
|
||||||
|
@ -80,7 +80,7 @@ for (i = 0; i < 30; i++)
|
|||||||
#if LANG_ENG
|
#if LANG_ENG
|
||||||
printf (" Error in console application.\n\r");
|
printf (" Error in console application.\n\r");
|
||||||
#elif LANG_RUS
|
#elif LANG_RUS
|
||||||
printf (" Ошибка в консольном приложении.\n\r");
|
printf (" Žè¨¡ª ¢ ª®á®«ì®¬ ¯à¨«®¦¥¨¨.\n\r");
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
};
|
};
|
||||||
|
@ -11,7 +11,7 @@ k70.p00 = 0;
|
|||||||
k70.p04 = 0;
|
k70.p04 = 0;
|
||||||
k70.p08 = 0;
|
k70.p08 = 0;
|
||||||
k70.p12 = 4; // ÷èòàòü 4 áàéòà
|
k70.p12 = 4; // ÷èòàòü 4 áàéòà
|
||||||
k70.p16 = buf;
|
k70.p16 = (unsigned) buf;
|
||||||
k70.p20 = 0;
|
k70.p20 = 0;
|
||||||
k70.p21 = file;
|
k70.p21 = file;
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ char *buf; //
|
|||||||
|
|
||||||
k70.p00 = 5;
|
k70.p00 = 5;
|
||||||
k70.p04 = k70.p08 = k70.p12 = 0;
|
k70.p04 = k70.p08 = k70.p12 = 0;
|
||||||
k70.p16 = &bdvk;
|
k70.p16 = (unsigned) &bdvk;
|
||||||
k70.p20 = 0;
|
k70.p20 = 0;
|
||||||
k70.p21 = exec;
|
k70.p21 = exec;
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ buf[filesize]=0;
|
|||||||
k70.p00 = 0;
|
k70.p00 = 0;
|
||||||
k70.p04 = k70.p08 = 0;
|
k70.p04 = k70.p08 = 0;
|
||||||
k70.p12 = filesize;
|
k70.p12 = filesize;
|
||||||
k70.p16 = buf;
|
k70.p16 = (unsigned) buf;
|
||||||
k70.p20 = 0;
|
k70.p20 = 0;
|
||||||
k70.p21 = exec;
|
k70.p21 = exec;
|
||||||
|
|
||||||
|
@ -25,4 +25,9 @@ int alias_add(char alias[]);
|
|||||||
int alias_split (char alias[], char s1[], char s2[]);
|
int alias_split (char alias[], char s1[], char s2[]);
|
||||||
void alias_list();
|
void alias_list();
|
||||||
|
|
||||||
|
int parameters_prepare(char *param, char* argv[]);
|
||||||
|
void parameters_free(int argc, char* argv[]);
|
||||||
|
|
||||||
|
void print_error(void);
|
||||||
|
|
||||||
/// ===========================================================
|
/// ===========================================================
|
||||||
|
@ -12,13 +12,13 @@ k70.p00 = 1;
|
|||||||
k70.p04 = 0;
|
k70.p04 = 0;
|
||||||
k70.p08 = 0;
|
k70.p08 = 0;
|
||||||
k70.p12 = 2*1024*1024; // 2 MB
|
k70.p12 = 2*1024*1024; // 2 MB
|
||||||
k70.p16 = malloc(2*1024*1024);
|
k70.p16 = (unsigned) malloc(2*1024*1024);
|
||||||
k70.p20 = 0;
|
k70.p20 = 0;
|
||||||
k70.p21 = dir;
|
k70.p21 = dir;
|
||||||
|
|
||||||
result = kol_file_70(&k70);
|
result = kol_file_70(&k70);
|
||||||
|
|
||||||
free(k70.p16);
|
free((void*)k70.p16);
|
||||||
|
|
||||||
if ( (0 == result)||(6 == result) )
|
if ( (0 == result)||(6 == result) )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
234
programs/system/shell/shell.inc
Normal file
234
programs/system/shell/shell.inc
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
|
||||||
|
|
||||||
|
SC_OK = 0
|
||||||
|
SC_EXIT = 1
|
||||||
|
SC_PUTC = 2
|
||||||
|
SC_PUTS = 3
|
||||||
|
SC_GETC = 4
|
||||||
|
SC_GETS = 5
|
||||||
|
SC_CLS = 6
|
||||||
|
|
||||||
|
SHM_WRITE = 0x01
|
||||||
|
SHM_OPEN_ALWAYS = 0x04
|
||||||
|
|
||||||
|
;============================
|
||||||
|
|
||||||
|
align 4
|
||||||
|
sc_name rb 64
|
||||||
|
sc_pid dd 0
|
||||||
|
sc_buffer dd 0
|
||||||
|
sc_process dd 0
|
||||||
|
|
||||||
|
;============================
|
||||||
|
|
||||||
|
align 4
|
||||||
|
_sc_pid2name:
|
||||||
|
|
||||||
|
push esp
|
||||||
|
push ebx
|
||||||
|
|
||||||
|
xor ecx, ecx
|
||||||
|
mov eax, [sc_pid]
|
||||||
|
mov ebx, 10
|
||||||
|
@@:
|
||||||
|
xor edx, edx
|
||||||
|
div ebx
|
||||||
|
push edx
|
||||||
|
inc ecx
|
||||||
|
test eax, eax
|
||||||
|
jnz @b
|
||||||
|
|
||||||
|
mov edi, sc_name
|
||||||
|
|
||||||
|
@@:
|
||||||
|
pop eax
|
||||||
|
add al, '0'
|
||||||
|
stosb
|
||||||
|
loop @b
|
||||||
|
|
||||||
|
|
||||||
|
mov al, '-'
|
||||||
|
stosb
|
||||||
|
mov al, 'S'
|
||||||
|
stosb
|
||||||
|
mov al, 'H'
|
||||||
|
stosb
|
||||||
|
mov al, 'E'
|
||||||
|
stosb
|
||||||
|
mov al, 'L'
|
||||||
|
stosb
|
||||||
|
mov al, 'L'
|
||||||
|
stosb
|
||||||
|
mov al, 0
|
||||||
|
stosb
|
||||||
|
|
||||||
|
|
||||||
|
pop ebx
|
||||||
|
pop esp
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
;============================
|
||||||
|
|
||||||
|
align 4
|
||||||
|
; void __stdcall sc_init();
|
||||||
|
_sc_init:
|
||||||
|
|
||||||
|
push esp
|
||||||
|
push ebx
|
||||||
|
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 11
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax, 68 ; ¢ë¤¥«¨âì ¯ ¬ïâì
|
||||||
|
mov ebx, 12
|
||||||
|
mov ecx, 1024
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov [sc_process], eax
|
||||||
|
|
||||||
|
mov eax, 9 ; ¯®«ãç¨âì ¨ä®à¬ æ¨î ® ⥪ã饬 ¯à®æ¥áá¥
|
||||||
|
mov ebx, [sc_process]
|
||||||
|
mov ecx, -1
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov dword eax, [ebx+30] ; ¯®«ãç ¥¬ PID ⥪饣® ¯à®æ¥áá
|
||||||
|
mov [sc_pid], eax
|
||||||
|
|
||||||
|
mov eax, 68 ; ®á¢®¡®¤¨âì ¯ ¬ïâì
|
||||||
|
mov ebx, 13
|
||||||
|
mov ecx, [sc_process]
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
call _sc_pid2name
|
||||||
|
|
||||||
|
mov eax, 68 ; ®âªàëâì ¨¬¥®¢ ãî ®¡« áâì
|
||||||
|
mov ebx, 22
|
||||||
|
mov dword ecx, sc_name
|
||||||
|
mov edx, 4096
|
||||||
|
mov esi, SHM_OPEN_ALWAYS or SHM_WRITE
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov [sc_buffer], eax
|
||||||
|
|
||||||
|
pop ebx
|
||||||
|
pop esp
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
;============================
|
||||||
|
|
||||||
|
align 4
|
||||||
|
; void __stdcall sc_puts(char *str);
|
||||||
|
_sc_puts:
|
||||||
|
|
||||||
|
push esp
|
||||||
|
push ebx
|
||||||
|
|
||||||
|
mov esi, [esp+12]
|
||||||
|
mov edi, [sc_buffer]
|
||||||
|
mov al, SC_PUTS
|
||||||
|
stosb
|
||||||
|
|
||||||
|
@@:
|
||||||
|
lodsb
|
||||||
|
stosb
|
||||||
|
test al, al
|
||||||
|
jnz @b
|
||||||
|
|
||||||
|
mov ebx, [sc_buffer]
|
||||||
|
|
||||||
|
@@:
|
||||||
|
mov byte dl, [ebx]
|
||||||
|
test dl, dl
|
||||||
|
jz @f
|
||||||
|
push ebx
|
||||||
|
mov eax, 5
|
||||||
|
mov ebx, 5
|
||||||
|
int 0x40
|
||||||
|
pop ebx
|
||||||
|
jmp @b
|
||||||
|
|
||||||
|
@@:
|
||||||
|
|
||||||
|
pop ebx
|
||||||
|
pop esp
|
||||||
|
ret 4
|
||||||
|
|
||||||
|
;============================
|
||||||
|
|
||||||
|
align 4
|
||||||
|
; void __stdcall sc_exit();
|
||||||
|
_sc_exit:
|
||||||
|
push ebx
|
||||||
|
push esp
|
||||||
|
|
||||||
|
mov ebx, [sc_buffer]
|
||||||
|
mov byte [ebx], SC_EXIT
|
||||||
|
|
||||||
|
@@:
|
||||||
|
mov byte dl, [ebx]
|
||||||
|
test dl, dl
|
||||||
|
jz @f
|
||||||
|
push ebx
|
||||||
|
mov eax, 5
|
||||||
|
mov ebx, 5
|
||||||
|
int 0x40
|
||||||
|
pop ebx
|
||||||
|
jmp @b
|
||||||
|
|
||||||
|
@@:
|
||||||
|
mov eax, 68 ;§ ªàëâì ¨¬¥®¢ ãî ®¡« áâì
|
||||||
|
mov ebx, 23
|
||||||
|
mov dword ecx, sc_name
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
pop esp
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;============================
|
||||||
|
|
||||||
|
align 4
|
||||||
|
; void __stdcall sc_gets(char *str);
|
||||||
|
_sc_gets:
|
||||||
|
|
||||||
|
push esp
|
||||||
|
push ebx
|
||||||
|
|
||||||
|
mov edi, [esp+12]
|
||||||
|
|
||||||
|
mov ebx, [sc_buffer]
|
||||||
|
mov byte [ebx], SC_GETS
|
||||||
|
|
||||||
|
@@:
|
||||||
|
mov byte dl, [ebx]
|
||||||
|
test dl, dl
|
||||||
|
jz @f
|
||||||
|
push ebx
|
||||||
|
mov eax, 5
|
||||||
|
mov ebx, 5
|
||||||
|
int 0x40
|
||||||
|
pop ebx
|
||||||
|
jmp @b
|
||||||
|
|
||||||
|
@@:
|
||||||
|
|
||||||
|
|
||||||
|
mov esi, [sc_buffer]
|
||||||
|
inc esi
|
||||||
|
|
||||||
|
@@:
|
||||||
|
lodsb
|
||||||
|
stosb
|
||||||
|
test al, al
|
||||||
|
jnz @b
|
||||||
|
|
||||||
|
pop ebx
|
||||||
|
pop esp
|
||||||
|
ret 4
|
||||||
|
|
||||||
|
;============================
|
||||||
|
|
@ -158,15 +158,30 @@ s[4] = 0;
|
|||||||
{
|
{
|
||||||
int i, sign;
|
int i, sign;
|
||||||
|
|
||||||
if ((sign = n) < 0) /* записываем знак */
|
if ((sign = n) < 0)
|
||||||
n = -n; /* делаем n положительным числом */
|
n = -n;
|
||||||
i = 0;
|
i = 0;
|
||||||
do { /* генерируем цифры в обратном порядке */
|
do {
|
||||||
s[i++] = n % 10 + '0'; /* берем следующую цифру */
|
s[i++] = n % 10 + '0';
|
||||||
} while ((n /= 10) > 0); /* удаляем */
|
} while ((n /= 10) > 0);
|
||||||
if (sign < 0)
|
if (sign < 0)
|
||||||
s[i++] = '-';
|
s[i++] = '-';
|
||||||
s[i] = '\0';
|
s[i] = '\0';
|
||||||
reverse(s);
|
reverse(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int _atoi ( char *s )
|
||||||
|
{
|
||||||
|
int i, n;
|
||||||
|
|
||||||
|
n = 0;
|
||||||
|
for ( i = 0; s[i]!= '\0'; ++i)
|
||||||
|
if ((s[i]<'0') || (s[i]>'9'))
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
n = 10 * n + s[i] - '0';
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
@ -16,3 +16,4 @@ char* strchr(const char* string, int c);
|
|||||||
void _itoa(int i, char *s);
|
void _itoa(int i, char *s);
|
||||||
void reverse(char *s);
|
void reverse(char *s);
|
||||||
void itoa(int i, char *s);
|
void itoa(int i, char *s);
|
||||||
|
int _atoi ( char *s );
|
||||||
|
36
programs/system/shell/test.asm
Normal file
36
programs/system/shell/test.asm
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
|
||||||
|
use32
|
||||||
|
org 0x0
|
||||||
|
|
||||||
|
db 'MENUET01' ; 8 byte id
|
||||||
|
dd 0x01 ; header version
|
||||||
|
dd START ; start of code
|
||||||
|
dd I_END ; size of image
|
||||||
|
dd 0x10000 ; memory for app
|
||||||
|
dd 0x10000 ; esp
|
||||||
|
dd param_area ; I_Param
|
||||||
|
dd app_path ; I_Path
|
||||||
|
|
||||||
|
include 'shell.inc'
|
||||||
|
START: ; start of execution
|
||||||
|
|
||||||
|
call _sc_init
|
||||||
|
|
||||||
|
push dword s
|
||||||
|
call _sc_gets
|
||||||
|
|
||||||
|
push dword s
|
||||||
|
call _sc_puts
|
||||||
|
|
||||||
|
call _sc_exit
|
||||||
|
|
||||||
|
mov eax, -1
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
|
||||||
|
I_END:
|
||||||
|
|
||||||
|
param_area rb 256
|
||||||
|
app_path rb 256
|
||||||
|
s rb 256
|
||||||
|
|
Loading…
Reference in New Issue
Block a user