From 2a7660964a3ba2245735b9d5154aca65ed2d1bf1 Mon Sep 17 00:00:00 2001 From: Albom Date: Sun, 24 Feb 2013 10:33:37 +0000 Subject: [PATCH] Shell version 0.6.2 git-svn-id: svn://kolibrios.org@3268 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/system/shell/History.txt | 5 +++ programs/system/shell/cmd/cmd_about.c | 1 + programs/system/shell/cmd/cmd_alias.c | 1 + programs/system/shell/cmd/cmd_cd.c | 1 + programs/system/shell/cmd/cmd_clear.c | 1 + programs/system/shell/globals.h | 2 +- .../system/shell/modules/module_parameters.c | 34 +++++++++++++++++++ programs/system/shell/prototypes.h | 3 +- programs/system/shell/test.c | 12 +++---- 9 files changed, 51 insertions(+), 9 deletions(-) diff --git a/programs/system/shell/History.txt b/programs/system/shell/History.txt index e5b89ee3bd..c9175511e6 100644 --- a/programs/system/shell/History.txt +++ b/programs/system/shell/History.txt @@ -1,4 +1,9 @@ +Shell 0.6.2 // 24.02.2013 // Albom +* Добавлена обработка управляющих символов (\n, \t, \", \', \\, \?) +* Мелкие исправления + + Shell 0.6.1 // 17.02.2013 // Albom * Простая обработка ошибок внутренних команд * Команда killall трансформирована в параметр all команды kill diff --git a/programs/system/shell/cmd/cmd_about.c b/programs/system/shell/cmd/cmd_about.c index 4326db83f6..01067cb9c9 100644 --- a/programs/system/shell/cmd/cmd_about.c +++ b/programs/system/shell/cmd/cmd_about.c @@ -11,3 +11,4 @@ Shell %s\n\r\n\r\ printf(message, SHELL_VERSION); return TRUE; } + diff --git a/programs/system/shell/cmd/cmd_alias.c b/programs/system/shell/cmd/cmd_alias.c index c06d0cc5b0..366f4444c5 100644 --- a/programs/system/shell/cmd/cmd_alias.c +++ b/programs/system/shell/cmd/cmd_alias.c @@ -17,3 +17,4 @@ if ( ( 0 != result ) && ( -1 != result ) ) return TRUE; } + diff --git a/programs/system/shell/cmd/cmd_cd.c b/programs/system/shell/cmd/cmd_cd.c index ddfef5ab0d..48039cac25 100644 --- a/programs/system/shell/cmd/cmd_cd.c +++ b/programs/system/shell/cmd/cmd_cd.c @@ -52,3 +52,4 @@ else } } + diff --git a/programs/system/shell/cmd/cmd_clear.c b/programs/system/shell/cmd/cmd_clear.c index 70913d9851..8f0325501f 100644 --- a/programs/system/shell/cmd/cmd_clear.c +++ b/programs/system/shell/cmd/cmd_clear.c @@ -4,3 +4,4 @@ int cmd_clear(char param[]) con_cls(); return TRUE; } + diff --git a/programs/system/shell/globals.h b/programs/system/shell/globals.h index 11009d3676..d1f6ea672f 100644 --- a/programs/system/shell/globals.h +++ b/programs/system/shell/globals.h @@ -1,5 +1,5 @@ -#define SHELL_VERSION "0.6" +#define SHELL_VERSION "0.6.2" extern char PATH[256]; extern char PARAM[256]; diff --git a/programs/system/shell/modules/module_parameters.c b/programs/system/shell/modules/module_parameters.c index 4236450b40..3fe7d5924d 100644 --- a/programs/system/shell/modules/module_parameters.c +++ b/programs/system/shell/modules/module_parameters.c @@ -20,6 +20,39 @@ for (i = 0; i < param_len; i++) { switch (param[i]) { + + case '\\': + if (param[i+1]!='\0') + { + switch(param[i+1]) + { + + case 'n': + argv[argc-1][argv_len] = '\n'; + argv_len++; + i++; + break; + + case 't': + argv[argc-1][argv_len] = '\t'; + argv_len++; + i++; + + case '\\': + case '\'': + case '"': + case '?': + argv[argc-1][argv_len] = param[i+1]; + argv_len++; + i++; + break; + + default: + i++; + }; + } + break; + case '"': if (quote == 0) quote = 1; @@ -62,6 +95,7 @@ for (i = 0; i < param_len; i++) argv[argc-1][argv_len] = param[i]; argv_len++; break; + }; } diff --git a/programs/system/shell/prototypes.h b/programs/system/shell/prototypes.h index e403bd49e1..2c96889c04 100644 --- a/programs/system/shell/prototypes.h +++ b/programs/system/shell/prototypes.h @@ -28,6 +28,5 @@ void alias_list(); int parameters_prepare(char *param, char* argv[]); void parameters_free(int argc, char* argv[]); -void print_error(void); - /// =========================================================== + diff --git a/programs/system/shell/test.c b/programs/system/shell/test.c index 605243d313..aedc28429d 100644 --- a/programs/system/shell/test.c +++ b/programs/system/shell/test.c @@ -4,10 +4,10 @@ #include "program_console.h" -char *buffer; // шёяюы№чєхЄё  Єюы№ъю юфэр шьхэютрээр  юсырёЄ№, яю¤Єюьє ьюцэю ёфхырЄ№ х╕ уыюсры№эющ яхЁхьхээющ -char name[32]; // шь  эєцэю ъръ фы  ёючфрэш  юсырёЄш, Єръ ш фы  єфрыхэш , яю¤Єюьє ьюцэю ёфхырЄ№ х╕ уыюсры№эющ яхЁхьхээющ +char *buffer; // используется только одна именованная область, поэтому можно сделать её глобальной переменной +char name[32]; // имя нужно как для создания области, так и для удаления, поэтому можно сделать её глобальной переменной -int sc_init() // шэшЎшрышчрЎш  - ёючфрэшх шьхэютрээющ юсырёЄш +int sc_init() // инициализация - создание именованной области { char *buf1k; @@ -19,15 +19,15 @@ buf1k = malloc(1024); if (NULL == buf1k) return -1; -kol_process_info(-1, buf1k); // яюыєўрхь ╤┬╬╔ (-1) шфхэЄшЇшърЄюЁ яЁюЎхёёр +kol_process_info(-1, buf1k); // получаем СВОЙ (-1) идентификатор процесса PID = *(buf1k+30); free(buf1k); -itoa(PID, name); // ЇюЁьшЁєхь шч эюьхЁр яЁюЎхёёр ёЄЁюъє ё чруыртэ√ьш эєы ьш 42 -> 0042 (Є.х. фю 9999) +itoa(PID, name); // формируем из номера процесса строку strcat(name, "-SHELL"); *buffer = NULL; -result = kol_buffer_open(name, SHM_OPEN_ALWAYS | SHM_WRITE, 1024*16, &buffer); // ёючфр╕ь юсырёЄ№ (16 ъшы) +result = kol_buffer_open(name, SHM_OPEN_ALWAYS | SHM_WRITE, 1024*16, &buffer); // создаём область (16 кбайт) return result; }