better up/dwn arrows, docu

git-svn-id: svn://kolibrios.org@6822 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
siemargl 2017-01-01 22:28:50 +00:00
parent 624f3666a5
commit 0a3c951b56
15 changed files with 181 additions and 148 deletions

View File

@ -22,3 +22,36 @@ SC_CLS 6
Программа должна сама заботиться о рациональном использовании процессорного времени. Программа должна сама заботиться о рациональном использовании процессорного времени.
Программа должна сама заботиться о закрытии именованной области. Программа должна сама заботиться о закрытии именованной области.
Команды Shell
=======================================
В угловых скобках указаны параметры команд
about выводит версию программы shell
alias без параметра выводит список синонимов команд,
с параметром вида newprg = old_name определяет синоним newprg
если есть пробелы, нужно значение закавычить newprg = "old name"
cd сменить текущий каталог на указанный параметром <каталог>
clear очистка экрана
cp копирование файла <источник> <результат>
date показывает дату и время
echo Выводит <данные> на экран
exit завершение работы Shell
free показывает объём оперативной памяти: всей, свободной и используемой
help показать печень команд shell. С параметром <команда> справка по команде
history cписок последних использованных команд
kill убивает процесс по <PID>. kill all убивает все пользовательские процессы PID >=2
ls выводит список файлов в текущем каталоге или указанном <каталоге>
mkdir cоздает <каталог>. Поддерживаются абсолюные и относительные пути
more выводит содержимое <файла> на экран
ps показывает список процессов и их PID
pwd показывает имя текущего каталога
reboot перезагружает компьютер или ядро KolibriOS. reboot kernel перезапустить ядро Kolibri
rm удаляет <файл>
rmdir удаляет <каталог>
shutdown выключает компьютер
sleep приостанавливает работу Shell'а на заданное <время в сотых долях секунды>
touch создаёт пустой <файл> или изменяет дату/время создания файла. Не работает
uptime показывает время работу системы с момента загрузки
ver показывает версию Shell, ver kernel - версию и номер ревизии ядра OS, ver cpu - информацию о процессоре

View File

@ -1,3 +1,6 @@
Shell 0.7.5 // 01.01.2017 // Siemargl
* <20>¥«×¨¥ ¡ £ה¨×בכ, ¨§¬¥­¥­  «®£¨×  ®¡א ¡®גר בגא¥«®× ¢¢¥או/¢­¨§, חג®¡כ × × ד ¢ב¥ו
Shell 0.7.4 // 23.01.2014 // Albom Shell 0.7.4 // 23.01.2014 // Albom
* <20> ¡®â  á ¡ãä¥à®¬ ®¡¬¥­  (ª®¯¨à®¢ ­¨¥ Ctrl+C ¨ ¢áâ ¢ª  Ctrl+V áâப¨ 楫¨ª®¬) * <20> ¡®â  á ¡ãä¥à®¬ ®¡¬¥­  (ª®¯¨à®¢ ­¨¥ Ctrl+C ¨ ¢áâ ¢ª  Ctrl+V áâப¨ 楫¨ª®¬)

View File

@ -1,5 +1,6 @@
#SHS #SHS
echo
about ver kernel
echo ‚¢¥¤¨â¥ 'help' ¤«ï á¯à ¢ª¨ echo
echo ‚¢¥¤¨â¥ 'help' ¤«ï á¯à ¢ª¨
echo echo

View File

@ -2,11 +2,7 @@
int cmd_about(char param[]) int cmd_about(char param[])
{ {
char message[] = { char message[] = {"Shell %s\n\r"};
"\
\n\r\
Shell %s\n\r\n\r\
"};
printf(message, SHELL_VERSION); printf(message, SHELL_VERSION);
return TRUE; return TRUE;

View File

@ -4,7 +4,7 @@ int cmd_alias(char arg[])
int result; int result;
if (NULL == arg) if (NULL == arg || '\0' == arg[0])
{ {
alias_list(); alias_list();
return TRUE; return TRUE;

View File

@ -4,7 +4,7 @@ int cmd_history(char arg[])
int i; int i;
for (i = 0; i < CMD_HISTORY_NUM_REAL; i++) for (i = CMD_HISTORY_NUM_REAL - 1; i >= 0; i--)
{ {
printf("%s\n", CMD_HISTORY[i]); printf("%s\n", CMD_HISTORY[i]);
} }

View File

@ -6,7 +6,7 @@ kol_struct70 k70;
char temp[256]; char temp[256];
unsigned result; unsigned result;
if (NULL == file) if (NULL == file || strlen(file) == 0)
{ {
#if LANG_ENG #if LANG_ENG
printf (" rm <filename>\n\r"); printf (" rm <filename>\n\r");

View File

@ -6,7 +6,7 @@ char temp[256];
kol_struct70 k70; kol_struct70 k70;
unsigned result; unsigned result;
if (NULL == dir) if (NULL == dir || strlen(dir) == 0)
{ {
#if LANG_ENG #if LANG_ENG
printf(" rmdir <directory>\n\r"); printf(" rmdir <directory>\n\r");

View File

@ -6,7 +6,7 @@ kol_struct70 k70;
char temp[256]; char temp[256];
unsigned result; unsigned result;
if (NULL == file) if (NULL == file || strlen(file) == 0)
{ {
#if LANG_ENG #if LANG_ENG
printf(" touch <filename>\n\r"); printf(" touch <filename>\n\r");

View File

@ -14,7 +14,7 @@ if (!strcmp(param, "kernel"))
vB = kvbuf+1; vB = kvbuf+1;
vC = kvbuf+2; vC = kvbuf+2;
vD = kvbuf+3; vD = kvbuf+3;
Rev = kvbuf+5; Rev = (unsigned*)(kvbuf + 5);
#if LANG_ENG #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);

View File

@ -1,5 +1,5 @@
#define SHELL_VERSION "0.7.4" #define SHELL_VERSION "0.7.5"
extern char PATH[256]; extern char PATH[256];
extern char PARAM[256]; extern char PARAM[256];
@ -14,7 +14,7 @@ unsigned ALIAS_NUM = 0;
/// =========================================================== /// ===========================================================
#define CMD_HISTORY_NUM 10 #define CMD_HISTORY_NUM 11
char CMD[256]; char CMD[256];
char CMD_HISTORY[CMD_HISTORY_NUM][256]; char CMD_HISTORY[CMD_HISTORY_NUM][256];

View File

@ -1,5 +1,6 @@
#SHS #SHS
echo
ver kernel ver kernel
echo Type 'help' for help echo
echo Type 'help' for help
echo echo

View File

@ -1,5 +1,6 @@
#SHS #SHS
echo
ver kernel ver kernel
echo ‚¢¥¤¨â¥ 'help' ¤«ï á¯à ¢ª¨ echo
echo ‚¢¥¤¨â¥ 'help' ¤«ï á¯à ¢ª¨
echo echo

View File

@ -6,9 +6,11 @@ void command_history_add()
int i; int i;
if ('\0' == CMD[0]) return;
for (i = 0; i < CMD_HISTORY_NUM_REAL; i++) for (i = 0; i < CMD_HISTORY_NUM_REAL; i++)
if ( 0 == strcmp( CMD_HISTORY[i], CMD ) ) if ( 0 == strcmp( CMD_HISTORY[i], CMD ) )
return; return;
for (i = CMD_HISTORY_NUM_REAL; i > 0 ; i--) for (i = CMD_HISTORY_NUM_REAL; i > 0 ; i--)
strcpy(CMD_HISTORY[i], CMD_HISTORY[i-1]); strcpy(CMD_HISTORY[i], CMD_HISTORY[i-1]);
@ -18,7 +20,7 @@ strcpy(CMD_HISTORY[0], CMD);
if (CMD_HISTORY_NUM_REAL < CMD_HISTORY_NUM-1) if (CMD_HISTORY_NUM_REAL < CMD_HISTORY_NUM-1)
CMD_HISTORY_NUM_REAL++; CMD_HISTORY_NUM_REAL++;
CMD_NUM = 0; CMD_NUM = -1;
} }
@ -48,41 +50,38 @@ for (;;)
switch (key) switch (key)
{ {
case 27: // ESC case 27: // ESC
for (i = cmdPos; i < cmdLen; i++) for (i = cmdPos; i < cmdLen; i++)
printf(" "); printf(" ");
for (i = cmdLen; i > 0; i--) for (i = cmdLen; i > 0; i--)
printf("%c %c", 8, 8); printf("%c %c", 8, 8);
cmdLen = 0; cmdLen = 0;
cmdPos = 0; cmdPos = 0;
CMD[0] = '\0'; CMD[0] = '\0';
break; break;
case 13: // ENTER case 13: // ENTER
printf("\n\r"); printf("\n\r");
command_history_add(); command_history_add();
return; return;
case 8: // BACKSPACE case 8: // BACKSPACE
if (cmdPos > 0) if (cmdPos > 0)
{ {
for (i = cmdPos-1; i < cmdLen; i++) for (i = cmdPos-1; i < cmdLen; i++)
CMD[i] = CMD[i+1]; CMD[i] = CMD[i+1];
for (i = 0; i < cmdLen-cmdPos; i++)
printf (" ");
for (i = 0; i < cmdLen-cmdPos; i++) for (i = 0; i < cmdLen; i++)
printf (" "); printf ("%c %c", 8, 8);
for (i = 0; i < cmdLen; i++)
printf ("%c %c", 8, 8);
printf("%s", CMD); printf("%s", CMD);
for (i = 0; i < cmdLen-cmdPos; i++) for (i = 0; i < cmdLen-cmdPos; i++)
printf("%c", 8); printf("%c", 8);
cmdPos--; cmdPos--;
cmdLen--; cmdLen--;
} }
break; break;
@ -102,14 +101,14 @@ for (;;)
if ((int)*(clipBuf+4)==0) // text? if ((int)*(clipBuf+4)==0) // text?
{ {
if ((int)*(clipBuf+8)==1) // 866 encoding? if ((int)*(clipBuf+8)==1) // 866 encoding?
{
for (i = cmdPos; i < cmdLen; i++) for (i = cmdPos; i < cmdLen; i++)
printf(" "); printf(" ");
for (i = cmdLen; i > 0; i--) for (i = cmdLen; i > 0; i--)
printf("%c %c", 8, 8); printf("%c %c", 8, 8);
cmdLen = 0; cmdLen = 0;
cmdPos = 0; cmdPos = 0;
CMD[0] = '\0'; CMD[0] = '\0';
// strcpy_n // strcpy_n
for (i = 0; i < 255; i++) for (i = 0; i < 255; i++)
@ -128,6 +127,7 @@ for (;;)
printf("%s", CMD); printf("%s", CMD);
} }
}
} }
} }
break; break;
@ -175,59 +175,57 @@ for (;;)
cmdPos++; cmdPos++;
cmdLen++; cmdLen++;
} }
break; break;
} }
} }
else else
{
key = (key>>8)&0xff;
switch (key)
{ {
key = (key>>8)&0xff; case 83: // Del
switch (key) if (cmdPos < cmdLen)
{ {
case 83: // Del for (i = cmdPos; i < cmdLen; i++)
if (cmdPos < cmdLen) CMD[i] = CMD[i+1];
{
for (i = cmdPos; i < cmdLen; i++)
CMD[i] = CMD[i+1];
for (i = 0; i < cmdLen-cmdPos; i++) for (i = 0; i < cmdLen-cmdPos; i++)
printf(" "); printf(" ");
for (i = 0; i < cmdLen-cmdPos; i++) for (i = 0; i < cmdLen-cmdPos; i++)
printf("%c", 8); printf("%c", 8);
for (i = cmdPos; i < cmdLen; i++) for (i = cmdPos; i < cmdLen; i++)
printf("%c", CMD[i]); printf("%c", CMD[i]);
for (i = 0; i < cmdLen-cmdPos; i++) for (i = 0; i < cmdLen-cmdPos; i++)
printf("%c", 8); printf("%c", 8);
cmdLen--; cmdLen--;
} }
break;
break; case 75: // Left
if (cmdPos > 0)
case 75: // Left {
if (cmdPos > 0) printf("%c", 8);
{ cmdPos--;
printf("%c", 8); }
cmdPos--; break;
}
break;
case 77: // Right case 77: // Right
if (cmdPos < cmdLen) if (cmdPos < cmdLen)
{ {
printf("%c", CMD[cmdPos]); printf("%c", CMD[cmdPos]);
cmdPos++; cmdPos++;
} }
break; break;
case 80: // Down case 72: // Up
if (CMD_HISTORY_NUM_REAL > 0 && CMD_NUM >= -1)
if (CMD_HISTORY_NUM_REAL > 0)
{ {
for (i = cmdPos; i < cmdLen; i++) for (i = cmdPos; i < cmdLen; i++)
@ -236,12 +234,12 @@ for (;;)
for (i = cmdLen; i > 0; i--) for (i = cmdLen; i > 0; i--)
printf("%c %c", 8, 8); printf("%c %c", 8, 8);
if (CMD_NUM < CMD_HISTORY_NUM_REAL-1) if (CMD_NUM < CMD_HISTORY_NUM_REAL-1)
CMD_NUM++; CMD_NUM++;
else /* else
CMD_NUM = 0; CMD_NUM = 0;
*/
printf( "%s", CMD_HISTORY[CMD_NUM] ); printf("%s", CMD_HISTORY[CMD_NUM]);
strcpy(CMD, CMD_HISTORY[CMD_NUM]); strcpy(CMD, CMD_HISTORY[CMD_NUM]);
cmdLen = strlen(CMD); cmdLen = strlen(CMD);
cmdPos = strlen(CMD); cmdPos = strlen(CMD);
@ -251,8 +249,8 @@ for (;;)
break; break;
case 72: // Up case 80: // Down
if (CMD_HISTORY_NUM_REAL > 0) if (CMD_HISTORY_NUM_REAL > 0 && CMD_NUM >= 0)
{ {
for (i = cmdPos; i < cmdLen; i++) for (i = cmdPos; i < cmdLen; i++)
@ -261,12 +259,12 @@ for (;;)
for (i = cmdLen; i > 0; i--) for (i = cmdLen; i > 0; i--)
printf("%c %c", 8, 8); printf("%c %c", 8, 8);
if (CMD_NUM > 0) if (CMD_NUM > 0)
CMD_NUM--; CMD_NUM--;
else /* else
CMD_NUM = CMD_HISTORY_NUM_REAL-1; CMD_NUM = CMD_HISTORY_NUM_REAL-1;
*/
printf( "%s", CMD_HISTORY[CMD_NUM] ); printf("%s", CMD_HISTORY[CMD_NUM]);
strcpy(CMD, CMD_HISTORY[CMD_NUM]); strcpy(CMD, CMD_HISTORY[CMD_NUM]);
cmdLen = strlen(CMD); cmdLen = strlen(CMD);
cmdPos = strlen(CMD); cmdPos = strlen(CMD);
@ -278,10 +276,10 @@ for (;;)
case 0: // console window closed case 0: // console window closed
cmd_exit(NULL); cmd_exit(NULL);
} }
} }
} }
} }
@ -296,41 +294,41 @@ if (CMD[0]=='"')
quote = 1; quote = 1;
if (quote == 0) if (quote == 0)
{ {
for (i=0;;i++) for (i=0;;i++)
{
cmd[i] = CMD[i];
if (0 == cmd[i])
return i;
if ( iswhite(cmd[i]) )
{ {
cmd[i] = '\0'; cmd[i] = CMD[i];
break; if (0 == cmd[i])
return i;
if ( iswhite(cmd[i]) )
{
cmd[i] = '\0';
break;
}
} }
return i+1;
} }
return i+1; else
} {
else len = 0;
{ for (i=1;;i++)
len = 0;
for (i=1;;i++)
{
cmd[len] = CMD[i];
if (0 == cmd[len])
{ {
i--; cmd[len] = CMD[i];
break; if (0 == cmd[len])
{
i--;
break;
}
if ( cmd[len] == '"' )
{
cmd[len] = '\0';
break;
}
len++;
} }
if ( cmd[len] == '"' ) trim(cmd);
{ return i+1;
cmd[len] = '\0';
break;
}
len++;
} }
trim(cmd);
return i+1;
}
} }
/// =========================================================== /// ===========================================================
@ -361,14 +359,14 @@ for (i = 0; i < NUM_OF_CMD; i++)
if (!strcmp(cmd, COMMANDS[i].name)) if (!strcmp(cmd, COMMANDS[i].name))
{ {
result = ((handler1_t)COMMANDS[i].handler)(args); result = ((handler1_t)COMMANDS[i].handler)(args);
if (result != TRUE) if (result != TRUE)
{ {
#if LANG_ENG #if LANG_ENG
printf(" Error!\n\r"); printf(" Error!\n\r");
#elif LANG_RUS #elif LANG_RUS
printf(" Žè¨¡ª !\n\r"); printf(" Žè¨¡ª !\n\r");
#endif #endif
} }
return; return;
} }
} }

View File

@ -58,13 +58,13 @@ asm volatile ("int $0x40"::"a"(11));
} }
void __attribute__((__always_inline__)) kol_paint_start() inline void __attribute__((__always_inline__)) kol_paint_start()
{ {
asm volatile ("int $0x40"::"a"(12), "b"(1)); asm volatile ("int $0x40"::"a"(12), "b"(1));
} }
void __attribute__((__always_inline__)) kol_paint_end() inline void __attribute__((__always_inline__)) kol_paint_end()
{ {
asm volatile ("int $0x40"::"a"(12), "b"(2)); asm volatile ("int $0x40"::"a"(12), "b"(2));
} }
@ -347,7 +347,7 @@ switch (*fname)
void __attribute__((__always_inline__)) kol_screen_wait_rr() inline void __attribute__((__always_inline__)) kol_screen_wait_rr()
{ {
asm volatile ("int $0x40"::"a"(18), "b"(14)); asm volatile ("int $0x40"::"a"(18), "b"(14));
} }