Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3244 → Rev 3245

/programs/system/shell/History.txt
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
=======================================
* Èñïðàâëåí èíòåðôåéñ èñïîëíÿåìûõ êîíñîëüíûõ ïðèëîæåíèé. Òåïåðü îíè äîëæíû ñîçäàâàòü áóôåð ñ èìåíåì pid-SHELL, ãäå pid - èäåíòèôèêàòîð ïðîöåññà áåç çàãëàâíûõ íóëåé
47,7 → 61,7
=======================================
Ïðîãðàììà òåïåðü ìíîãîÿçûêîâàÿ (àíãëèéñêèé, è ðóññêèé ÿçûê). Ïðîãðàììà ïîëíîñòüþ ðóñèôèöèðîâàííà.
* Êîìàíäà "free" ïåðåèìåíîâàíà â "memory" - äëÿ òî÷íîñòè.
* Äîáàâëåíû êîìàíäû turnoff (âûêëþ÷èòü êîìïüþòåð), kerver (âåðñèÿ ÿäðà KoOS), uptime; reboot òåïåðü ìîæåò ïåðåçàãðóæàòü ÿäðî ("reboot kernel")
* Äîáàâëåíû êîìàíäû turnoff (âûêëþ÷èòü êîìïüþòåð), kerver (âåðñèÿ ÿäðà KolibriOS), uptime; reboot òåïåðü ìîæåò ïåðåçàãðóæàòü ÿäðî ("reboot kernel")
 
 
Shell 0.4.4 // 20.08.2010 // Albom
59,8 → 73,8
* ccpuid - âûâîä â êîíñîëü èíôîðìàöèè (ïîêà ñêóäíî) î ïðîöåññîðå. ïîëüçû ìàëî, íî äàâíî õîòåë ñ êîìàíäîé cpuid ðàçîáðàòüñÿ (â ñëåäóþùåì ñåìåñòðå áóäó ñòóäåíòàì êóðñ ÷èòàòü, âêëþ÷èë ðàçáîð êîìàíäû â ïðîãðàììó).
 
åñòü ìíîãî èäåé. íåêîòîðûå ëåãêî ðåàëèçóþòñÿ, íåêîòîðûå ñëîæíåå. åñëè èíòåðåñíî:
1) äîáàâèòü ïåðåìåííóþ (îäíó!), â êîòîðóþ áóäåò ðåçóëüòàò â òåêñòîâîé ôîðìå (íå òî ÷òî âîçâðàùàåò ô-öèÿ) çàïèñûâàòüñÿ. ñ íåé ìîæíî áóäåò ðàáîòàòü èç êîìàíäíîé ñòðîêè.
2) âíåäðèòü ïðîñòóþ ñòåêîâóþ ìàøèíó äëÿ âû÷èñëåíèé ñ âåùåñòâåííûìè ÷èñëàìè.
1) äîáàâèòü ïåðåìåííóþ (îäíó!), â êîòîðóþ áóäåò ðåçóëüòàò â òåêñòîâîé ôîðìå (íå òî ÷òî âîçâðàùàåò ôóíêöèÿ) çàïèñûâàòüñÿ. ñ íåé ìîæíî áóäåò ðàáîòàòü èç êîìàíäíîé ñòðîêè
2) âíåäðèòü ïðîñòóþ ñòåêîâóþ ìàøèíó äëÿ âû÷èñëåíèé ñ âåùåñòâåííûìè ÷èñëàìè
 
 
Shell 0.4.3 // 20.08.2010 // Albom
70,7 → 84,7
 
Shell 0.4.2 // 28.08.2009 // diamond
=======================================
* Äîáàâèë êîððåêòíîå çàâåðøåíèå ðàáîòû ïðè çàêðûòèè îêíà êîíñîëè, ðàáîòàåò òîëüêî íà÷èíàÿ ñ ïîñëåäíåé íà äàííûé ìîìåíò âåðñèåé áèáëèîòåêè (ëåæèò íà svn, âêëþ÷åíà â íî÷íóþ ñáîðêó). Ïåðåêîìïèëèðîâàë â VS2008 ñ LTCG, åù¸ ïîøàìàíèë ñ îïòèìèçàöèåé ïî ðàçìåðó.
* Äîáàâèë êîððåêòíîå çàâåðøåíèå ðàáîòû ïðè çàêðûòèè îêíà êîíñîëè, ðàáîòàåò òîëüêî íà÷èíàÿ ñ ïîñëåäíåé íà äàííûé ìîìåíò âåðñèåé áèáëèîòåêè (ëåæèò íà svn, âêëþ÷åíà â íî÷íóþ ñáîðêó). Ïåðåêîìïèëèðîâàë â VS2008 ñ LTCG, åù¸ ïîøàìàíèë ñ îïòèìèçàöèåé ïî ðàçìåðó
 
 
Shell 0.4.1 // 16.03.2009 // Albom
94,7 → 108,7
alias ls=somecommand
- ïðè îòëàäêå ïîëó÷àë ñòðàííóþ èíôîðìàöèþ, íî òàê êàê ó ìåíÿ âñ¸ ðàáîòàåò, òî ïîêà èçìåíåíèé âíîñèòü íå ïëàíèðóþ
 
2) Òåïåðü øåëë ìîæíî çàïóñêàòü ñ ïàðàìåòðîì (èç ñàìîãî ñåáÿ, íàïðèìåð).
2) Òåïåðü øåëë ìîæíî çàïóñêàòü ñ ïàðàìåòðîì (èç ñàìîãî ñåáÿ, íàïðèìåð)
- ñèíòàêñèñ:
shell êîìàíäà
- ïðèìåð:
101,7 → 115,7
shell /sys/somescript
- ïðè ýòîì .shell íå çàïóñêàåòñÿ
 
3) Ðåàëèçîâàíà êîìàíäà more. ( MEMENTO MORI! - Ìîìåíòàëüíî... â ìîðå! )
3) Ðåàëèçîâàíà êîìàíäà more
- ïðîñìîòð òåêñòîâûõ è áèíàðíûõ ôàéëîâ (âðîäå áû çàäà÷à ïðîñòàÿ, íî ïðèøëîñü ïîâîçèòüñÿ ñ óïðàâëÿþùèìè ñèìâîëàìè)
- î÷åíü íå ðåêîìåíäóåòñÿ ïðîñìàòðèâàòü áîëüøèå ôàéëû
 
108,7 → 122,7
 
Shell 0.3 // 07.08.2008 // Albom
=======================================
1) Âîçìîæíîñòü çàïóñêà ñêðèïòîâ.
1) Âîçìîæíîñòü çàïóñêà ñêðèïòîâ
* êàæäàÿ ñòðîêà äîëæíà ïðåäñòàâëÿåò ñîáîé êîìàíäó
* ñòðîêîé ñ÷èòàåòñÿ íàáîð ñèìâîëîâ, êîòîðûé çàêàí÷èâàåòñÿ CR+LF (Windows) èëè LF(UNIX) èëè CR(Mac)
* åñëè ñòðîêà íà÷èíàåòñÿ ñ #, òî âñÿ ñòðîêà (ò.å. êîììåíòàðèé) èãíîðèðóåòñÿ
115,12 → 129,12
* ñêðèïò äîëæåí íà÷èòàòüñÿ ñ #SHS
* ïðè çàïóñêå øåëëà àâòîìàòè÷åñêè çàïóñêàåòñÿ ñêðèïò .shell
 
2) Èñòîðèÿ èç 5 (ìîæíî èçìåíèòü ïðè êîìïèëÿöèè) ââåä¸ííûõ êîìàíä.
2) Èñòîðèÿ èç 5 (ìîæíî èçìåíèòü ïðè êîìïèëÿöèè) ââåä¸ííûõ êîìàíä
* ïåðåìåùåíèå ïî èñòîðèè - UP/DOWN
 
3) Êîìàíäà alias, êîòîðàÿ ïîçâîëÿåò ââîäèòü ñèíîíèìû äëÿ êîìàíä.
3) Êîìàíäà alias, êîòîðàÿ ïîçâîëÿåò ââîäèòü ñèíîíèìû äëÿ êîìàíä
* äî 256 (ìîæíî èçìåíèòü ïðè êîìïèëÿöèè) ñèíîíèìîâ
* ïîêà ðàáîòàåò òîëüêî äîáàâëåíèå è ïðîñìîòð ñèíîíèìîâ, à îòðàáîòêà ïîêà íå ðåàëèçîâàíà.
* ïîêà ðàáîòàåò òîëüêî äîáàâëåíèå è ïðîñìîòð ñèíîíèìîâ, à îòðàáîòêà ïîêà íå ðåàëèçîâàíà
 
 
Shell 0.2 // 04.08.2008 // Albom
131,13 → 145,13
 
Shell 0.11 // 01.08.2008 // Albom
=======================================
* Äîáàâèë êîìàíäû free è reboot, âí¸ñ íåêîòîðûå èçìåíåíèÿ, èñïðàâèë íàéäåííûå îøèáêè.
* Äîáàâèë êîìàíäû free è reboot, âí¸ñ íåêîòîðûå èçìåíåíèÿ, èñïðàâèë íàéäåííûå îøèáêè
 
 
Shell 0.1 // 29.07.2008 // Albom
=======================================
* Ðåàëèçîâàíû (íå ïîëíîñòüþ) êîìàíäû: about, cd, date, echo, exit, help, kill, ls, ps, pwd, ver
* Ïðè çàïóñêå ïðîãðàììû (åñëè íå óêàçàí ïîëíûé ïóòü) îíà èùåòñÿ â êàòàëîãå /rd/1 è òåêóùåì êàòàëîãå.
* Ïðè çàïóñêå ïðîãðàììû (åñëè íå óêàçàí ïîëíûé ïóòü) îíà èùåòñÿ â êàòàëîãå /rd/1 è òåêóùåì êàòàëîãå
 
 
Shell 0.02 // 27.07.2008 // Albom
153,6 → 167,6
Shell 0.01 // 27.07.2008 // Albom
=======================================
* Ðåøèë íàïèñàòü ôóíêöèîíàëüíûé øåëë íà Ñè ñ èñïîëüçîâàíèåì console.obj.
* Ïîêà ñäåëàë ôóíêöèþ îòäåëåíèÿ êîìàíäû è ïàðàìåòðîâ, à òàêæå ðåàëèçîâàë êîìàíäû help (ïîêà áåç ïàðàìåòðîâ), ver è exit.
* Ðåøèë íàïèñàòü ôóíêöèîíàëüíûé øåëë íà Ñè ñ èñïîëüçîâàíèåì console.obj
* Ïîêà ñäåëàë ôóíêöèþ îòäåëåíèÿ êîìàíäû è ïàðàìåòðîâ, à òàêæå ðåàëèçîâàë êîìàíäû help (ïîêà áåç ïàðàìåòðîâ), ver è exit
 
/programs/system/shell/all.h
37,12 → 37,12
#include "cmd/cmd_alias.c"
#include "cmd/cmd_more.c"
#include "cmd/cmd_clear.c"
#include "cmd/cmd_ccpuid.c"
#include "cmd/cmd_sleep.c"
#include "cmd/cmd_shutdown.c"
#include "cmd/cmd_uptime.c"
#include "cmd/cmd_killall.c"
#include "cmd/cmd_history.c"
#include "cmd/cmd_cp.c"
 
#include "modules/module_command.c"
#include "modules/module_program_console.c"
50,5 → 50,6
#include "modules/module_script.c"
#include "modules/module_executable.c"
#include "modules/module_alias.c"
#include "modules/module_parameters.c"
 
/// ===========================================================
/programs/system/shell/cmd/cmd_ccpuid.c
File deleted
/programs/system/shell/cmd/cmd_cp.c
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;
}
 
/programs/system/shell/cmd/cmd_kill.c
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[])
{
 
/programs/system/shell/cmd/cmd_ls.c
14,7 → 14,7
k70.p04 = 0;
k70.p08 = 0;
k70.p12 = 10000;
k70.p16 = malloc(32+k70.p12*560);
k70.p16 = (unsigned) malloc(32+k70.p12*560);
k70.p20 = 0;
 
/// !!!
27,17 → 27,17
result = kol_file_70(&k70);
if ( !((result==0) || (result==6)) ) // ïðîâåðÿåì ñóùåñòâîâàíèå êàòàëîãà
{
free(k70.p16);
free( (void*) k70.p16);
return FALSE;
}
 
n = k70.p16+8;
n = (unsigned*) (k70.p16+8);
num_of_file = *n; // ÷èñëî ôàéëîâ â êàòàëîãå
 
for (i = 0; i < num_of_file; 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;
if ( (0x10 == (type_of_file&0x10)) || (8 == (type_of_file&8)) )
printf ("/");
44,6 → 44,6
printf ("\n\r");
}
 
free(k70.p16);
free((void*)k70.p16);
return TRUE;
}
/programs/system/shell/cmd/cmd_more.c
45,7 → 45,7
 
k70.p00 = 5;
k70.p04 = k70.p08 = k70.p12 = 0;
k70.p16 = &bdvk;
k70.p16 = (unsigned) &bdvk;
k70.p20 = 0;
k70.p21 = temp;
 
67,7 → 67,7
k70.p04 = pos;
k70.p08 = 0;
k70.p12 = 80;
k70.p16 = buf;
k70.p16 = (unsigned) buf;
k70.p20 = 0;
k70.p21 = temp;
 
/programs/system/shell/cmd/cmd_ver.c
10,25 → 10,56
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);
printf (" KolibriOS v%d.%d.%d.%d. Kernel SVN-rev.: %d\n\r", *vA, *vB, *vC, *vD, *Rev);
#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
 
free(kvbuf);
 
return TRUE;
}
else
printf (" Shell v%s\n\r", SHELL_VERSION);
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;
}
/programs/system/shell/compile_eng.bat
1,12 → 1,11
@echo off
erase lang.h
echo #define LANG_ENG 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
gcc -c system/ctype.c
gcc -c -fno-builtin shell.c
gcc -c -fno-builtin system/kolibri.c
gcc -c -fno-builtin system/stdlib.c
gcc -c -fno-builtin system/string.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
objcopy shell -O binary
erase lang.h start.o shell.o kolibri.o stdlib.o string.o
/programs/system/shell/compile_rus.bat
1,12 → 1,11
@echo off
erase 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
gcc -c system/ctype.c
gcc -c -fno-builtin shell.c
gcc -c -fno-builtin system/kolibri.c
gcc -c -fno-builtin system/stdlib.c
gcc -c -fno-builtin system/string.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
objcopy shell -O binary
erase lang.h start.o shell.o kolibri.o stdlib.o string.o ctype.o
/programs/system/shell/compile_test.bat
1,10 → 1,10
@echo off
fasm start.asm start.o
gcc -c test.c
gcc -c system/kolibri.c
gcc -c system/stdlib.c
gcc -c system/string.c
gcc -c system/ctype.c
gcc -c -fno-builtin test.c
gcc -c -fno-builtin system/kolibri.c
gcc -c -fno-builtin system/stdlib.c
gcc -c -fno-builtin system/string.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
objcopy test -O binary
erase start.o kolibri.o stdlib.o string.o ctype.o test.o
/programs/system/shell/compile_test_asm.bat
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
/programs/system/shell/globals.h
1,5 → 1,5
 
#define SHELL_VERSION "0.5.4"
#define SHELL_VERSION "0.6"
 
extern char PATH[256];
extern char PARAM[256];
14,7 → 14,7
 
/// ===========================================================
 
#define CMD_HISTORY_NUM 5
#define CMD_HISTORY_NUM 10
 
char CMD[256];
char CMD_HISTORY[CMD_HISTORY_NUM][256];
44,7 → 44,6
 
int cmd_about(char arg[]);
int cmd_alias(char arg[]);
int cmd_ccpuid(char dir[]);
int cmd_cd(char dir[]);
int cmd_clear(char arg[]);
int cmd_date(char arg[]);
68,7 → 67,9
int cmd_uptime(char param[]);
int cmd_killall(char process_name[]);
int cmd_history(char arg[]);
int cmd_cp(char param[]);
 
 
/// ===========================================================
 
#if LANG_ENG
/programs/system/shell/locale/eng/globals.h
3,9 → 3,9
{
{"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},
{"cp", " Copies file\n\r", &cmd_cp},
{"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},
26,5 → 26,5
{"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},
{"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},
};
/programs/system/shell/locale/rus/globals.h
3,9 → 3,9
{
{"about", " ‚뢮¤¨â ¨­ä®à¬ æ¨î ® ¯à®£à ¬¬¥ Shell\n\r", &cmd_about},
{"alias", " ®ª §ë¢ ¥â ¨ ¯®§¢®«ï¥â ¨§¬¥­¨âì ᯨ᮪ ᨭ®­¨¬®¢ ª®¬ ­¤\n\r", &cmd_alias},
{"ccpuid", " ‚뢮¤¨â ¨­ä®à¬ æ¨î ® CPU\n\r", &cmd_ccpuid},
{"cd", " ˆ§¬¥­ï¥â ⥪ãéãî ¤¥à¨ªâ®à¨î. ˆá¯®«ì§®¢ ­¨¥:\n\r cd <¤¨à¥ªâ®à¨ï>\n\r", &cmd_cd},
{"clear", " Žç¨é ¥â íªà ­\n\r", &cmd_clear},
{"cp", " Š®¯¨àã¥â ä ©«\n\r", &cmd_cp},
{"date", " ®ª §ë¢ ¥â ⥪ãéãî ¤ âã ¨ ¢à¥¬ï\n\r", &cmd_date},
{"echo", " ‚뢮¤¨â ¤ ­­ë¥ ­  íªà ­. ˆá¯®«ì§®¢ ­¨¥:\n\r echo <¤ ­­ë¥>\n\r", &cmd_echo},
{"exit", " ‡ ¢¥à襭¨¥ à ¡®âë Shell\n\r", &cmd_exit},
26,5 → 26,5
{"sleep", " Žáâ ­ ¢«¨¢ ¥â à ¡®âã Shell'  ­  § ¤ ­­®¥ ¢à¥¬ï. ˆá¯®«ì§®¢ ­¨¥:\n\r sleep <¨­â¥à¢ « ¢ á®âëå ¤®«ï ᥪ㭤ë>\n\r à¨¬¥à:\n\r sleep 500 ;¯ ã§  ­  5 ᥪ.\n\r", &cmd_sleep},
{"touch", " ‘®§¤ ñâ ¯ãá⮩ ä ©« ¨«¨ ¨§¬¥­ï¥â ¤ âã/¢à¥¬ï ᮧ¤ ­¨ï ä ©« . ˆá¯®«ì§®¢ ­¨¥:\n\r touch <¨¬ï ä ©« >\n\r", &cmd_touch},
{"uptime", " ®ª §ë¢ ¥â uptime\n\r", &cmd_uptime},
{"ver", " ®ª §ë¢ ¥â ¢¥àá¨î. ˆá¯®«ì§®¢ ­¨¥:\n\r ver ;¢¥àá¨ï Shell\n\r ver kernel ;¢¥àá¨ï ¨ ­®¬¥à ॢ¨§¨¨ ï¤à  KolibriOS\n\r", &cmd_ver},
{"ver", " ®ª §ë¢ ¥â ¢¥àá¨î. ˆá¯®«ì§®¢ ­¨¥:\n\r ver ;¢¥àá¨ï Shell\n\r ver kernel ;¢¥àá¨ï ¨ ­®¬¥à ॢ¨§¨¨ ï¤à  KolibriOS\n\r ver cpu ;¨­ä®à¬ æ¨ï ® ¯à®æ¥áá®à¥\n\r", &cmd_ver},
};
/programs/system/shell/modules/module_command.c
17,9 → 17,19
(0 != strcmp( CMD_HISTORY[1], CMD)) &&
(0 != strcmp( CMD_HISTORY[2], 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[3], CMD_HISTORY[2]);
strcpy(CMD_HISTORY[2], CMD_HISTORY[1]);
100,7 → 110,7
switch (key)
{
 
case 72: // UP
case 80: // Down
for (hist = 0; hist < CMD_HISTORY_NUM; hist++)
{
command_clear();
118,7 → 128,7
 
break;
 
case 80: // DOWN
case 72: // Up
for (hist = 0; hist < CMD_HISTORY_NUM; hist++)
{
command_clear();
150,7 → 160,14
 
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++)
{
cmd[i] = CMD[i];
167,6 → 184,28
}
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;
}
}
 
/// ===========================================================
 
/programs/system/shell/modules/module_parameters.c
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]);
 
}
 
/// ===========================================================
/programs/system/shell/modules/module_program.c
6,7 → 6,7
 
k70.p00 = 7;
k70.p04 = 0;
k70.p08 = param;
k70.p08 = (unsigned) param;
k70.p12 = 0;
k70.p16 = 0;
k70.p20 = 0;
/programs/system/shell/modules/module_program_console.c
80,7 → 80,7
#if LANG_ENG
printf (" Error in console application.\n\r");
#elif LANG_RUS
printf (" Îøèáêà â êîíñîëüíîì ïðèëîæåíèè.\n\r");
printf (" Žè¨¡ª  ¢ ª®­á®«ì­®¬ ¯à¨«®¦¥­¨¨.\n\r");
#endif
return 0;
};
/programs/system/shell/modules/module_script.c
11,7 → 11,7
k70.p04 = 0;
k70.p08 = 0;
k70.p12 = 4; // ÷èòàòü 4 áàéòà
k70.p16 = buf;
k70.p16 = (unsigned) buf;
k70.p20 = 0;
k70.p21 = file;
 
35,7 → 35,7
 
k70.p00 = 5;
k70.p04 = k70.p08 = k70.p12 = 0;
k70.p16 = &bdvk;
k70.p16 = (unsigned) &bdvk;
k70.p20 = 0;
k70.p21 = exec;
 
54,7 → 54,7
k70.p00 = 0;
k70.p04 = k70.p08 = 0;
k70.p12 = filesize;
k70.p16 = buf;
k70.p16 = (unsigned) buf;
k70.p20 = 0;
k70.p21 = exec;
 
/programs/system/shell/prototypes.h
25,4 → 25,9
int alias_split (char alias[], char s1[], char s2[]);
void alias_list();
 
int parameters_prepare(char *param, char* argv[]);
void parameters_free(int argc, char* argv[]);
 
void print_error(void);
 
/// ===========================================================
/programs/system/shell/shell.c
12,13 → 12,13
k70.p04 = 0;
k70.p08 = 0;
k70.p12 = 2*1024*1024; // 2 MB
k70.p16 = malloc(2*1024*1024);
k70.p16 = (unsigned) malloc(2*1024*1024);
k70.p20 = 0;
k70.p21 = dir;
 
result = kol_file_70(&k70);
 
free(k70.p16);
free((void*)k70.p16);
 
if ( (0 == result)||(6 == result) )
return TRUE;
/programs/system/shell/shell.inc
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
 
;============================
 
/programs/system/shell/system/string.c
158,12 → 158,12
{
int i, sign;
if ((sign = n) < 0) /* çàïèñûâàåì çíàê */
n = -n; /* äåëàåì n ïîëîæèòåëüíûì ÷èñëîì */
if ((sign = n) < 0)
n = -n;
i = 0;
do { /* ãåíåðèðóåì öèôðû â îáðàòíîì ïîðÿäêå */
s[i++] = n % 10 + '0'; /* áåðåì ñëåäóþùóþ öèôðó */
} while ((n /= 10) > 0); /* óäàëÿåì */
do {
s[i++] = n % 10 + '0';
} while ((n /= 10) > 0);
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
170,3 → 170,18
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;
}
/programs/system/shell/system/string.h
16,3 → 16,4
void _itoa(int i, char *s);
void reverse(char *s);
void itoa(int i, char *s);
int _atoi ( char *s );
/programs/system/shell/test.asm
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