/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 |