/programs/system/shell/Docs_rus.txt |
---|
0,0 → 1,23 |
Shell 0.5 // 23.03.2012 // Albom |
======================================= |
* Äîáàâëåíà ïîääåðæêà êîíñîëüíûõ ïðèëîæåíèé, êîòîðûå îáùàþòñÿ ñ øåëëîì ÷åðåç èìåíîâàííóþ îáëàñòü |
Êîíñîëüíîå ïðèëîæåíèå ìîæåò áûòü íàïèñàíî íà ëþáîì ÿçûêå ïðîãðàììèðîâàíèÿ - ýòî îáûêíîâåííàÿ ïðîãðàììà äëÿ ÊîëèáðèÎÑ. |
1) Êîíñîëüíîå ïðèëîæåíèå ïîñëå ñâîåãî çàïóñêà  ÏÅÐÂÓÞ Î×ÅÐÅÄÜ äîëæíî ñîçäàòü èìåíîâàííóþ îáëàñòü ñ èìåíåì pid-SHELL, ãäå pid - èäåíòèôèêàòîð ïðîöåññà ñ çàãëàâíûìè íóëÿìè, |
íàïðèìåð: 42 -> 0042 (ò.å. ñåé÷àñ îãðàíè÷åíèå äî 9999). |
+ íóæíî ñäåëàòü, ÷òîáû ïðîãðàììà êîððåêòíî çàâåðøàëàñü, åñëè çàïóùåíà íå èç øåëëà (ÑÅÉ×ÀÑ ÍÅ ÐÅÀËÈÇÎÂÀÍÎ!!!) |
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 î÷èñòèòü ýêðàí |
3) Ïðîãðàììà äîëæíà ÑÀÌÀ çàáîòèòüñÿ î ðàöèîíàëüíîì èñïîëüçîâàíèè ïðîöåññîðíîãî âðåìåíè. |
4) Ïðîãðàììà äîëæíà ÑÀÌÀ çàáîòèòüñÿ î çàêðûòèè èìåíîâàííîé îáëàñòè. |
/programs/system/shell/History.txt |
---|
1,16 → 1,25 |
Shell 0.5 // 23.03.2012 // Albom |
======================================= |
* Äîáàâëåíà ïîääåðæêà êîíñîëüíûõ ïðèëîæåíèé, êîòîðûå îáùàþòñÿ ñ øåëëîì ÷åðåç èìåíîâàííóþ îáëàñòü |
Shell 0.4.6 // 30.01.2011 // Albom |
======================================= |
* Âðåìåííî óäàëåíû êîìàíäû killall è ccpuid (÷òîáû âåðíóòü, íåîáõîäèìî ðàñêîììåíòèðîâàòü 2 ñòðî÷êè) |
* Èñïðàâëåíèÿ â òåêñòîâûõ ñòðîêàõ |
Shell 0.4.52 // 25.10.2010 // Pterox |
======================================= |
* Äîáàâëåíà êîìàíäà "killall" - óáèâàåò âñå ïðîöåññû êðîìå OS/IDLE. |
* Ôèêñû |
Shell 0.4.51 // 21.10.2010 // Pterox |
======================================= |
* Êîìàíäà "turnoff" ïåðåèìåíîâàíà â "shutdown", "kerver" óäàëåíà - òåïåðü å¸ çàìåíÿåò "ver kernel"; ôèêñû. |
Shell 0.4.5 // 19.10.2010 // Pterox |
======================================= |
Ïðîãðàììà òåïåðü ìíîãîÿçûêîâàÿ (àíãëèéñêèé, è ðóññêèé ÿçûê). Ïðîãðàììà ïîëíîñòüþ ðóñèôèöèðîâàííà. |
17,6 → 26,7 |
* Êîìàíäà "free" ïåðåèìåíîâàíà â "memory" - äëÿ òî÷íîñòè. |
* Äîáàâëåíû êîìàíäû turnoff (âûêëþ÷èòü êîìïüþòåð), kerver (âåðñèÿ ÿäðà KoOS), uptime; reboot òåïåðü ìîæåò ïåðåçàãðóæàòü ÿäðî ("reboot kernel") |
Shell 0.4.4 // 20.08.2010 // Albom |
======================================= |
1) øåëë êîððåêòíî çàâåðøàåòñÿ ïðè çàêðûòèè îêíà |
29,19 → 39,23 |
1) äîáàâèòü ïåðåìåííóþ (îäíó!), â êîòîðóþ áóäåò ðåçóëüòàò â òåêñòîâîé ôîðìå (íå òî ÷òî âîçâðàùàåò ô-öèÿ) çàïèñûâàòüñÿ. ñ íåé ìîæíî áóäåò ðàáîòàòü èç êîìàíäíîé ñòðîêè. |
2) âíåäðèòü ïðîñòóþ ñòåêîâóþ ìàøèíó äëÿ âû÷èñëåíèé ñ âåùåñòâåííûìè ÷èñëàìè. |
Shell 0.4.3 // 20.08.2010 // Albom |
======================================= |
* Ñìåñü âåðñèé 0.4.1 è 0.4.2. Òåïåðü â àðõèâå âñå èñõîäíûå ôàéëû, íåîáõîäèìûå äëÿ êîìïèëÿöèè (ðàíüøå èñïîëüçîâàëèñü îáúåêòíèêè ñ ìîèìè îá¸ðòêàìè, èñõîäíèêè ÿ ñ øåëëîì íå âûêëàäûâàë) |
Shell 0.4.2 // 28.08.2009 // diamond |
======================================= |
* Äîáàâèë êîððåêòíîå çàâåðøåíèå ðàáîòû ïðè çàêðûòèè îêíà êîíñîëè, ðàáîòàåò òîëüêî íà÷èíàÿ ñ ïîñëåäíåé íà äàííûé ìîìåíò âåðñèåé áèáëèîòåêè (ëåæèò íà svn, âêëþ÷åíà â íî÷íóþ ñáîðêó). Ïåðåêîìïèëèðîâàë â VS2008 ñ LTCG, åù¸ ïîøàìàíèë ñ îïòèìèçàöèåé ïî ðàçìåðó. |
Shell 0.4.1 // 16.03.2009 // Albom |
======================================= |
* âåðñèÿ ñ èñïðàâëåííûìè îøèáêàìè. |
* ðàáîòàåò êîìàíäà alias, äîáàâëåíà êîìàíäà clear. |
Shell 0.4 // 12.08.2008 // Albom |
======================================= |
1) Ðàáîòàåò ñõåìà ïñåâäîíèìîâ (äî 256 êîìàíä) |
68,6 → 82,7 |
- ïðîñìîòð òåêñòîâûõ è áèíàðíûõ ôàéëîâ (âðîäå áû çàäà÷à ïðîñòàÿ, íî ïðèøëîñü ïîâîçèòüñÿ ñ óïðàâëÿþùèìè ñèìâîëàìè) |
- î÷åíü íå ðåêîìåíäóåòñÿ ïðîñìàòðèâàòü áîëüøèå ôàéëû |
Shell 0.3 // 07.08.2008 // Albom |
======================================= |
1) Âîçìîæíîñòü çàïóñêà ñêðèïòîâ. |
84,20 → 99,24 |
* äî 256 (ìîæíî èçìåíèòü ïðè êîìïèëÿöèè) ñèíîíèìîâ |
* ïîêà ðàáîòàåò òîëüêî äîáàâëåíèå è ïðîñìîòð ñèíîíèìîâ, à îòðàáîòêà ïîêà íå ðåàëèçîâàíà. |
Shell 0.2 // 04.08.2008 // Albom |
======================================= |
* äîáàâèë íîâûå ôóíêöèè |
* íàïèñàë ñîáñòâåííóþ ïðîöåäóðó ââîäà êîìàíäû |
Shell 0.11 // 01.08.2008 // Albom |
======================================= |
* Äîáàâèë êîìàíäû free è reboot, âí¸ñ íåêîòîðûå èçìåíåíèÿ, èñïðàâèë íàéäåííûå îøèáêè. |
Shell 0.1 // 29.07.2008 // Albom |
======================================= |
* Ðåàëèçîâàíû (íå ïîëíîñòüþ) êîìàíäû: about, cd, date, echo, exit, help, kill, ls, ps, pwd, ver |
* Ïðè çàïóñêå ïðîãðàììû (åñëè íå óêàçàí ïîëíûé ïóòü) îíà èùåòñÿ â êàòàëîãå /rd/1 è òåêóùåì êàòàëîãå. |
Shell 0.02 // 27.07.2008 // Albom |
======================================= |
* Ðåàëèçîâàë êîìàíäû: |
108,6 → 127,7 |
kill - çàâåðøèòü ïðîöåññ ïî PID |
help (ñ ïàðàìåòðîì è áåç) - ïîìîùü |
Shell 0.01 // 27.07.2008 // Albom |
======================================= |
* Ðåøèë íàïèñàòü ôóíêöèîíàëüíûé øåëë íà Ñè ñ èñïîëüçîâàíèåì console.obj. |
/programs/system/shell/all.h |
---|
44,6 → 44,7 |
#include "cmd/cmd_killall.c" |
#include "modules/module_command.c" |
#include "modules/module_program_console.c" |
#include "modules/module_program.c" |
#include "modules/module_script.c" |
#include "modules/module_executable.c" |
/programs/system/shell/cmd/cmd_ps.c |
---|
5,8 → 5,6 |
int i, n; |
char *buf1k; |
unsigned PID; |
unsigned *p; |
short *s; |
short STATE; |
buf1k = malloc(1024); |
16,10 → 14,8 |
for (i = 1;;i++) |
{ |
n = kol_process_info(i, buf1k); |
p = buf1k+30; |
PID = *p; |
s = buf1k+50; |
STATE = *s; |
PID = *(buf1k+30); |
STATE = *(buf1k+50); |
if ( 9 != STATE) |
printf (" %7d %s\n\r", PID, buf1k+10); |
if (i == n) |
/programs/system/shell/compile_rus.bat |
---|
9,7 → 9,7 |
gcc -c 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 |
erase lang.h start.o shell.o kolibri.o stdlib.o string.o ctype.o |
kpack shell |
move shell bin\rus\ |
copy locale\rus\.shell bin\rus\ |
/programs/system/shell/compile_test.bat |
---|
0,0 → 1,14 |
@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 |
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 |
kpack test |
copy test bin\eng\ |
move test bin\rus\ |
pause |
/programs/system/shell/globals.h |
---|
1,5 → 1,5 |
#define SHELL_VERSION "0.4.91" |
#define SHELL_VERSION "0.5" |
extern char PATH[256]; |
extern char PARAM[256]; |
/programs/system/shell/modules/module_executable.c |
---|
49,11 → 49,15 |
result = program_run(exec, args); |
if (result > 0) |
{ |
if ( !program_console(result) ) |
{ |
#if LANG_ENG |
printf (" '%s' started. PID = %d\n\r", cmd, result); |
#elif LANG_RUS |
printf (" '%s' § ¯ãé¥. PID = %d\n\r", cmd, result); |
#endif |
} |
return TRUE; |
} |
else |
/programs/system/shell/modules/module_program_console.c |
---|
0,0 → 1,95 |
#include "../program_console.h" |
int program_console(int pid) |
{ |
char name[32]; |
char *buffer; |
int result; |
int i; |
char command; |
int size; |
int is_end; |
_itoa(pid, name); |
strcat(name, "-SHELL"); |
buffer = NULL; |
for (i = 0; i < 30; i++) |
{ |
result = kol_buffer_open(name, SHM_OPEN | SHM_WRITE, 0, &buffer); |
if (buffer != NULL) |
break; |
kol_sleep(2); |
} |
if (buffer == NULL) |
return 0; |
else |
size = result; |
is_end = 0; |
for (;;) |
{ |
command = *(buffer); |
switch (command) |
{ |
case SC_EXIT: |
*buffer = SC_OK; |
is_end = 1; |
break; |
case SC_OK: |
kol_sleep(5); |
break; |
case SC_CLS: |
con_cls(); |
*buffer = SC_OK; |
break; |
case SC_PUTC: |
printf("%c", *(buffer+1)); |
*buffer = SC_OK; |
break; |
case SC_PUTS: |
printf("%s", buffer+1 ); |
*buffer = SC_OK; |
break; |
case SC_GETC: |
*(buffer+1) = (char) getch() ; |
*buffer = SC_OK; |
break; |
case SC_GETS: |
gets(buffer+1, size-2); |
*buffer = SC_OK; |
break; |
default: |
#if LANG_ENG |
printf (" Error in console application.\n\r"); |
#elif LANG_RUS |
printf (" Îøèáêà â êîíñîëüíîì ïðèëîæåíèè.\n\r"); |
#endif |
return 0; |
}; |
if (is_end) |
{ |
printf("\n\r"); |
return 1; |
} |
} |
return 9; |
} |
/programs/system/shell/program_console.h |
---|
0,0 → 1,8 |
#define SC_OK 0 |
#define SC_EXIT 1 |
#define SC_PUTC 2 |
#define SC_PUTS 3 |
#define SC_GETC 4 |
#define SC_GETS 5 |
#define SC_CLS 6 |
/programs/system/shell/system/kolibri.c |
---|
215,15 → 215,14 |
void kol_board_puti(int n) |
{ |
char c; |
int i = 0; |
do |
{ |
if ( n > 1 ) |
kol_board_puti(n / 10); |
c = n % 10 + '0'; |
asm ("int $0x40"::"a"(63), "b"(1), "c"(c)); |
i++; |
} |
while ((n /= 10) > 0); |
} |
int kol_file_70(kol_struct70 *k) |
419,4 → 418,17 |
void kol_get_kernel_ver(char buff16b[]) |
{ |
asm ("int $0x40"::"a"(18), "b"(13), "c"(buff16b)); |
} |
} |
int kol_buffer_open(char name[], int mode, int size, char **buf) |
{ |
int error; |
asm ("movl %0, %%esi"::"r"(mode)); |
asm ("int $0x40":"=a"(*buf), "=d"(error):"a"(68), "b"(22), "c"(name), "d"(size)); |
return error; |
} |
void kol_buffer_close(char name[]) |
{ |
asm ("int $0x40"::"a"(68), "b"(23), "c"(name)); |
} |
/programs/system/shell/system/kolibri.h |
---|
1,6 → 1,18 |
#define NULL ((void*)0) |
#define SHM_OPEN 0 |
#define SHM_OPEN_ALWAYS 0x04 |
#define SHM_CREATE 0x08 |
#define SHM_READ 0x00 |
#define SHM_WRITE 0x01 |
#define E_NOTFOUND 5 |
#define E_ACCESS 10 |
#define E_NOMEM 30 |
#define E_PARAM 33 |
typedef struct |
{ |
unsigned p00 __attribute__((packed)); |
89,4 → 101,6 |
unsigned kol_process_info(unsigned slot, char buf1k[]); |
int kol_process_kill_pid(unsigned process); |
void kol_get_kernel_ver(char buff16b[]); |
int kol_kill_process(unsigned process); |
int kol_kill_process(unsigned process); |
int kol_buffer_open(char name[], int mode, int size, char **buf); |
void kol_buffer_close(char name[]); |
/programs/system/shell/system/string.c |
---|
122,3 → 122,19 |
return (char*)0; |
} |
void _itoa(int i, char *s) |
{ |
int a, b, c, d; |
a = (i - i%1000)/1000; |
b = (i - i%100)/100 - a*10; |
c = (i - i%10)/10 - a*100 - b*10; |
d = i%10; |
s[0] = a + '0'; |
s[1] = b + '0'; |
s[2] = c + '0'; |
s[3] = d + '0'; |
s[4] = 0; |
} |
/programs/system/shell/system/string.h |
---|
13,3 → 13,4 |
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); |
/programs/system/shell/test.c |
---|
0,0 → 1,109 |
#include "system/kolibri.h" |
#include "system/string.h" |
#include "program_console.h" |
char *buffer; // èñïîëüçóåòñÿ òîëüêî îäíà èìåíîâàííàÿ îáëàñòü, ïîýòîìó ìîæíî ñäåëàòü å¸ ãëîáàëüíîé ïåðåìåííîé |
char name[32]; // èìÿ íóæíî êàê äëÿ ñîçäàíèÿ îáëàñòè, òàê è äëÿ óäàëåíèÿ, ïîýòîìó ìîæíî ñäåëàòü å¸ ãëîáàëüíîé ïåðåìåííîé |
int sc_init() // èíèöèàëèçàöèÿ - ñîçäàíèå èìåíîâàííîé îáëàñòè |
{ |
char *buf1k; |
unsigned PID; |
int result; |
buf1k = malloc(1024); |
if (NULL == buf1k) |
return -1; |
kol_process_info(-1, buf1k); // ïîëó÷àåì ÑÂÎÉ (-1) èäåíòèôèêàòîð ïðîöåññà |
PID = *(buf1k+30); |
free(buf1k); |
_itoa(PID, name); // ôîðìèðóåì èç íîìåðà ïðîöåññà ñòðîêó ñ çàãëàâíûìè íóëÿìè 42 -> 0042 (ò.å. äî 9999) |
strcat(name, "-SHELL"); |
*buffer = NULL; |
result = kol_buffer_open(name, SHM_OPEN_ALWAYS | SHM_WRITE, 1024*16, &buffer); // ñîçäà¸ì îáëàñòü (16 êèë) |
return result; |
} |
void sc_puts(char *str) |
{ |
*buffer = SC_PUTS; |
strcpy(buffer+1, str); |
while (*buffer) kol_sleep(5); |
} |
void sc_exit() |
{ |
*buffer = SC_EXIT; |
while (*buffer) kol_sleep(5); |
kol_buffer_close(name); |
} |
void sc_gets(char *str) |
{ |
*buffer = SC_GETS; |
while (*buffer) kol_sleep(5); |
strcpy(str, buffer+1); |
} |
char sc_getc() |
{ |
*buffer = SC_GETC; |
while (*buffer) kol_sleep(5); |
return *(buffer+1); |
} |
void sc_putc(char c) |
{ |
*buffer = SC_PUTC; |
*(buffer+1) = c; |
while (*buffer) kol_sleep(5); |
} |
void sc_cls() |
{ |
*buffer = SC_CLS; |
while (*buffer) kol_sleep(5); |
} |
void kol_main() |
{ |
char string[256]; |
sc_init(); |
sc_cls(); |
sc_puts("This is a test console application for Shell\n\r"); |
sc_puts("Type a string (255 symbols max): "); |
sc_gets(string); |
sc_puts("You typed:\n\r"); |
sc_puts(string); |
sc_puts("Press any key: "); |
string[0] = sc_getc(); |
sc_puts("\n\rYou pressed: "); |
sc_putc(string[0]); |
sc_exit(); |
} |