forked from KolibriOS/kolibrios
Shell 0.5.4: changes in console apps; history cmd added; ccpuid, free, killall cmds came back.
git-svn-id: svn://kolibrios.org@2735 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
c876fb5ca5
commit
a2ca7586dc
@ -1,23 +1,24 @@
|
||||
Shell 0.5 // 23.03.2012 // Albom
|
||||
Консольные приложения Shell
|
||||
=======================================
|
||||
* Добавлена поддержка консольных приложений, которые общаются с шеллом через именованную область
|
||||
|
||||
Обмен информацией между Shell и консольными приложениями осуществляется через именованную область.
|
||||
|
||||
Консольное приложение может быть написано на любом языке программирования - это обыкновенная программа для КолибриОС.
|
||||
|
||||
1) Консольное приложение после своего запуска В ПЕРВУЮ ОЧЕРЕДЬ должно создать именованную область с именем pid-SHELL, где pid - идентификатор процесса с заглавными нулями,
|
||||
например: 42 -> 0042 (т.е. сейчас ограничение до 9999).
|
||||
+ нужно сделать, чтобы программа корректно завершалась, если запущена не из шелла (СЕЙЧАС НЕ РЕАЛИЗОВАНО!!!)
|
||||
Консольное приложение после своего запуска в первую очередь должно создать именованную область с именем pid-SHELL, где pid - идентификатор процесса без заглавных нулей,
|
||||
например: 6, 42 или 204.
|
||||
|
||||
2) Первый байт области - команда (т.е. максимум 255 команд), далее - данные (могут отсутствовать).
|
||||
Список команд для версии 0.5:
|
||||
SC_OK 0 ничего не делать
|
||||
SC_EXIT 1 выход
|
||||
SC_PUTC 2 вывести на экран символ
|
||||
SC_PUTS 3 вывести на экран строку
|
||||
SC_GETC 4 считать с клавиатуры символ
|
||||
SC_GETS 5 считать с клавиатуры строку
|
||||
SC_CLS 6 очистить экран
|
||||
Первый байт области - команда (т.е. максимум 255 команд, что вполне достаточно), далее - данные (могут отсутствовать).
|
||||
|
||||
3) Программа должна САМА заботиться о рациональном использовании процессорного времени.
|
||||
Список реализованных команд:
|
||||
SC_OK 0 ничего не делать
|
||||
SC_EXIT 1 выход
|
||||
SC_PUTC 2 вывести на экран символ
|
||||
SC_PUTS 3 вывести на экран строку
|
||||
SC_GETC 4 считать с клавиатуры символ
|
||||
SC_GETS 5 считать с клавиатуры строку
|
||||
SC_CLS 6 очистить экран
|
||||
|
||||
4) Программа должна САМА заботиться о закрытии именованной области.
|
||||
Программа должна сама заботиться о рациональном использовании процессорного времени.
|
||||
|
||||
Программа должна сама заботиться о закрытии именованной области.
|
||||
|
@ -1,3 +1,15 @@
|
||||
Shell 0.5.4 // 04.06.2012 // Albom
|
||||
=======================================
|
||||
* Исправлен интерфейс исполняемых консольных приложений. Теперь они должны создавать буфер с именем pid-SHELL, где pid - идентификатор процесса без заглавных нулей
|
||||
* Реинкарнированы команды ccpuid, free, killall
|
||||
+ Добавлена команда history
|
||||
|
||||
|
||||
Shell 0.5.3 // 19.04.2012 // Albom
|
||||
=======================================
|
||||
* Исправление в команде pwd
|
||||
|
||||
|
||||
Shell 0.5.2 // 16.04.2012 // Albom
|
||||
=======================================
|
||||
* Исправление в команде ls
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include "cmd/cmd_date.c"
|
||||
#include "cmd/cmd_exit.c"
|
||||
#include "cmd/cmd_cd.c"
|
||||
#include "cmd/cmd_memory.c"
|
||||
#include "cmd/cmd_free.c"
|
||||
#include "cmd/cmd_reboot.c"
|
||||
#include "cmd/cmd_mkdir.c"
|
||||
#include "cmd/cmd_rmdir.c"
|
||||
@ -42,6 +42,7 @@
|
||||
#include "cmd/cmd_shutdown.c"
|
||||
#include "cmd/cmd_uptime.c"
|
||||
#include "cmd/cmd_killall.c"
|
||||
#include "cmd/cmd_history.c"
|
||||
|
||||
#include "modules/module_command.c"
|
||||
#include "modules/module_program_console.c"
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
int cmd_free(char param[])
|
||||
int cmd_memory(char param[])
|
||||
{
|
||||
unsigned total, free, used;
|
||||
|
||||
@ -7,7 +7,11 @@ total = kol_system_mem();
|
||||
free = kol_system_memfree();
|
||||
used = total - free;
|
||||
|
||||
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",
|
||||
#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;
|
||||
|
13
programs/system/shell/cmd/cmd_history.c
Normal file
13
programs/system/shell/cmd/cmd_history.c
Normal file
@ -0,0 +1,13 @@
|
||||
|
||||
int cmd_history(char arg[])
|
||||
{
|
||||
|
||||
int i;
|
||||
|
||||
for (i = 0; i < CMD_HISTORY_NUM_REAL; i++)
|
||||
{
|
||||
printf("%s\n", CMD_HISTORY[i]);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
@ -16,4 +16,4 @@ up_millisecs = (time_tick*10)%100;
|
||||
printf (" Uptime: %d きォ, %d:%d:%d.%d\n\r", up_days, up_hours, up_minutes, up_seconds, up_millisecs);
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
#define SHELL_VERSION "0.5.3"
|
||||
#define SHELL_VERSION "0.5.4"
|
||||
|
||||
extern char PATH[256];
|
||||
extern char PARAM[256];
|
||||
@ -19,6 +19,7 @@ unsigned ALIAS_NUM = 0;
|
||||
char CMD[256];
|
||||
char CMD_HISTORY[CMD_HISTORY_NUM][256];
|
||||
char CMD_NUM;
|
||||
char CMD_HISTORY_NUM_REAL = 0;
|
||||
|
||||
unsigned CMD_POS;
|
||||
|
||||
@ -66,6 +67,7 @@ int cmd_sleep(char arg[]);
|
||||
int cmd_shutdown(char arg[]);
|
||||
int cmd_uptime(char param[]);
|
||||
int cmd_killall(char process_name[]);
|
||||
int cmd_history(char arg[]);
|
||||
|
||||
/// ===========================================================
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
|
||||
const command_t COMMANDS[]=
|
||||
{
|
||||
{"about", " Displays information about Shell\n\r", &cmd_about},
|
||||
@ -8,8 +9,9 @@ const command_t COMMANDS[]=
|
||||
{"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},
|
||||
{"free", " 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},
|
||||
{"history", " Lists used commands\n\r", &cmd_history},
|
||||
{"kill", " Stops a running process. Usage:\n\r kill <PID of process>\n\r", &cmd_kill},
|
||||
{"killall", " Kills all running processes\n\r", &cmd_killall},
|
||||
{"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},
|
||||
@ -20,9 +22,9 @@ const command_t COMMANDS[]=
|
||||
{"reboot", " Reboots the computer or KolibriOS kernel. Usage:\n\r reboot ;reboot a PC\n\r reboot kernel ;reboot the KolibriOS 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},
|
||||
{"shutdown"," Turns off the computer\n\r", &cmd_shutdown},
|
||||
{"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},
|
||||
{"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},
|
||||
};
|
||||
};
|
||||
|
@ -1,17 +1,19 @@
|
||||
|
||||
const command_t COMMANDS[]=
|
||||
{
|
||||
{"about", " ‚뢮¤¨â ¨ä®à¬ æ¨î ® ¯à®£à ¬¬¥ Shell\n\r", &cmd_about},
|
||||
{"alias", " <20>®ª §ë¢ ¥â ¨ ¯®§¢®«ï¥â ¨§¬¥¨âì ᯨ᮪ ᨮ¨¬®¢ ª®¬ ¤\n\r", &cmd_alias},
|
||||
// {"ccpuid", " ‚뢮¤¨â ¨ä®à¬ æ¨î ® CPU\n\r", &cmd_ccpuid},
|
||||
{"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", " ‡ ¢¥à襨¥ à ¡®âë Shell\n\r", &cmd_exit},
|
||||
{"memory", " <20>®ª §ë¢ ¥â ®¡êñ¬ ¯ ¬ïâ¨: ¢á¥©, ᢮¡®¤®© ¨ ¨á¯®«ì§ã¥¬®©\n\r", &cmd_memory},
|
||||
{"free", " <20>®ª §ë¢ ¥â ®¡êñ¬ ®¯¥à ⨢®© ¯ ¬ïâ¨: ¢á¥©, ᢮¡®¤®© ¨ ¨á¯®«ì§ã¥¬®©\n\r", &cmd_memory},
|
||||
{"help", " ‘¯à ¢ª ¯® ª®¬ ¤ ¬. ˆá¯®«ì§®¢ ¨¥:\n\r help ;ᯨ᮪ ¢á¥å ª®¬ ¤\n\r help <ª®¬ ¤ > ;á¯à ¢ª ¯® ª®¬ ¤¥\n\r", &cmd_help},
|
||||
{"history", " ‘¯¨á®ª ¨á¯®«ì§®¢ ëå ª®¬ ¤\n\r", &cmd_history},
|
||||
{"kill", " “¡¨¢ ¥â ¯à®æ¥áá. ˆá¯®«ì§®¢ ¨¥:\n\r kill <PID ¯à®æ¥áá >\n\r", &cmd_kill},
|
||||
// {"killall", " “¡¨¢ ¥â ¢á¥ § ¯ãé¥ë¥ ¯à®æ¥ááë\n\r", &cmd_killall},
|
||||
{"killall", " “¡¨¢ ¥â ¢á¥ § ¯ãé¥ë¥ ¯à®æ¥ááë\n\r", &cmd_killall},
|
||||
{"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},
|
||||
@ -20,8 +22,8 @@ const command_t COMMANDS[]=
|
||||
{"reboot", " <20>¥à¥§ £à㦠¥â ª®¬¯ìîâ¥à ¨«¨ ï¤à® KolibriOS. ˆá¯®«ì§®¢ ¨¥:\n\r reboot ;¯¥à¥§ £à㧨âì <20>Š\n\r reboot kernel ;¯¥à¥§ ¯ãáâ¨âì ï¤à® Kolibri\n\r", &cmd_reboot},
|
||||
{"rm", " “¤ «ï¥â ä ©«. ˆá¯®«ì§®¢ ¨¥:\n\r rm <¨¬ï ä ©« >\n\r", &cmd_rm},
|
||||
{"rmdir", " “¤ «ï¥â ¯ ¯ªã. ˆá¯®«ì§®¢ ¨¥:\n\r rmdir <¤¨à¥ªâ®à¨ï>\n\r", &cmd_rmdir},
|
||||
{"sleep", " Žáâ ¢«¨¢ ¥â à ¡®âã Shell' § ¤ ®¥ ¢à¥¬ï. ˆá¯®«ì§®¢ ¨¥:\n\r sleep <¨â¥à¢ « ¢ á®âëå ¤®«ï ᥪã¤ë>\n\r <20>ਬ¥à:\n\r sleep 500 ;¯ 㧠5 ᥪ.\n\r", &cmd_sleep},
|
||||
{"shutdown"," ‚몫îç ¥â ª®¬¯ìîâ¥à\n\r", &cmd_shutdown},
|
||||
{"sleep", " Žáâ ¢«¨¢ ¥â à ¡®âã Shell' § ¤ ®¥ ¢à¥¬ï. ˆá¯®«ì§®¢ ¨¥:\n\r sleep <¨â¥à¢ « ¢ á®âëå ¤®«ï ᥪã¤ë>\n\r <20>ਬ¥à:\n\r sleep 500 ;¯ 㧠5 ᥪ.\n\r", &cmd_sleep},
|
||||
{"touch", " ‘®§¤ ñâ ¯ãá⮩ ä ©« ¨«¨ ¨§¬¥ï¥â ¤ âã/¢à¥¬ï ᮧ¤ ¨ï ä ©« . ˆá¯®«ì§®¢ ¨¥:\n\r touch <¨¬ï ä ©« >\n\r", &cmd_touch},
|
||||
{"uptime", " <20>®ª §ë¢ ¥â uptime\n\r", &cmd_uptime},
|
||||
{"ver", " <20>®ª §ë¢ ¥â ¢¥àá¨î. ˆá¯®«ì§®¢ ¨¥:\n\r ver ;¢¥àá¨ï Shell\n\r ver kernel ;¢¥àá¨ï ¨ ®¬¥à ॢ¨§¨¨ ï¤à KolibriOS\n\r", &cmd_ver},
|
||||
|
@ -26,6 +26,10 @@ if ( (0 != strcmp( CMD_HISTORY[0], CMD)) &&
|
||||
strcpy(CMD_HISTORY[1], CMD_HISTORY[0]);
|
||||
|
||||
strcpy(CMD_HISTORY[0], CMD);
|
||||
|
||||
if (CMD_HISTORY_NUM_REAL < CMD_HISTORY_NUM)
|
||||
CMD_HISTORY_NUM_REAL++;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ char command;
|
||||
int size;
|
||||
int is_end;
|
||||
|
||||
_itoa(pid, name);
|
||||
itoa(pid, name);
|
||||
strcat(name, "-SHELL");
|
||||
|
||||
buffer = NULL;
|
||||
@ -92,4 +92,4 @@ for (i = 0; i < 30; i++)
|
||||
}
|
||||
|
||||
return 9;
|
||||
}
|
||||
}
|
||||
|
@ -138,3 +138,35 @@ s[3] = d + '0';
|
||||
s[4] = 0;
|
||||
}
|
||||
|
||||
|
||||
/* reverse: ïåðåâîðà÷èâàåì ñòðîêó s íà ìåñòå */
|
||||
void reverse(char s[])
|
||||
{
|
||||
int i, j;
|
||||
char c;
|
||||
|
||||
for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
|
||||
c = s[i];
|
||||
s[i] = s[j];
|
||||
s[j] = c;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* itoa: êîíâåðòèðóåì n â ñèìâîëû â s */
|
||||
void itoa(int n, char s[])
|
||||
{
|
||||
int i, sign;
|
||||
|
||||
if ((sign = n) < 0) /* çàïèñûâàåì çíàê */
|
||||
n = -n; /* äåëàåì n ïîëîæèòåëüíûì ÷èñëîì */
|
||||
i = 0;
|
||||
do { /* ãåíåðèðóåì öèôðû â îáðàòíîì ïîðÿäêå */
|
||||
s[i++] = n % 10 + '0'; /* áåðåì ñëåäóþùóþ öèôðó */
|
||||
} while ((n /= 10) > 0); /* óäàëÿåì */
|
||||
if (sign < 0)
|
||||
s[i++] = '-';
|
||||
s[i] = '\0';
|
||||
reverse(s);
|
||||
}
|
||||
|
||||
|
@ -4,13 +4,15 @@
|
||||
#endif
|
||||
|
||||
void* memset(void *mem, int c, unsigned size);
|
||||
void* memcpy(void *dst, const void *src, unsigned size);
|
||||
int memcmp(const void* buf1, const void* buf2, int count);
|
||||
void* memcpy(void *dst, const void *src, unsigned size);
|
||||
int memcmp(const void* buf1, const void* buf2, int count);
|
||||
|
||||
void strcat(char strDest[], char strSource[]);
|
||||
int strcmp(const char* string1, const char* string2);
|
||||
void strcpy(char strDest[], const char strSource[]);
|
||||
void strcat(char strDest[], char strSource[]);
|
||||
int strcmp(const char* string1, const char* string2);
|
||||
void strcpy(char strDest[], const char strSource[]);
|
||||
char* strncpy(char *strDest, const char *strSource, unsigned n);
|
||||
int strlen(const char* string);
|
||||
char *strchr(const char* string, int c);
|
||||
void _itoa(int i, char *s);
|
||||
int strlen(const char* string);
|
||||
char* strchr(const char* string, int c);
|
||||
void _itoa(int i, char *s);
|
||||
void reverse(char *s);
|
||||
void itoa(int i, char *s);
|
||||
|
@ -23,7 +23,7 @@ kol_process_info(-1, buf1k); //
|
||||
PID = *(buf1k+30);
|
||||
free(buf1k);
|
||||
|
||||
_itoa(PID, name); // формируем из номера процесса строку с заглавными нулями 42 -> 0042 (т.е. до 9999)
|
||||
itoa(PID, name); // формируем из номера процесса строку с заглавными нулями 42 -> 0042 (т.е. до 9999)
|
||||
strcat(name, "-SHELL");
|
||||
|
||||
*buffer = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user