Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 2501 → Rev 2502

/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();
 
 
 
}