* help now displays the list of commands in three columns

* ps now displays the RAM size used by the process
* ls now displays all files not in one but in several columns, the old single column output is still accessible via the key '-1'

git-svn-id: svn://kolibrios.org@7024 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2017-09-27 18:44:15 +00:00
parent 6768b8ab22
commit 9e91bb1d1c
8 changed files with 74 additions and 12 deletions

View File

@ -43,12 +43,13 @@ help
history cписок последних использованных команд history cписок последних использованных команд
kill убивает процесс по <PID>. kill all убивает все процессы, слоты >=2 kill убивает процесс по <PID>. kill all убивает все процессы, слоты >=2
ls выводит список файлов в текущем каталоге или указанном <каталоге> ls выводит список файлов в текущем каталоге или указанном <каталоге>
ключ '-1' выводит список в одну колонку, иначе многоколоночный вывод
mkdir cоздает <каталог>. Поддерживаются абсолюные и относительные пути mkdir cоздает <каталог>. Поддерживаются абсолюные и относительные пути
more выводит содержимое <файла> на экран more выводит содержимое <файла> на экран
ps показывает список процессов и их PID, ps показывает список процессов и их PID,
если задать <имя>, покажет %CPU, используемую память и запомнит если задать <имя>, покажет %CPU, используемую память и запомнит
внутреннюю переменную LASTPID (полезно для команды waitfor) внутреннюю переменную LASTPID (полезно для команды waitfor)
<имя> - это первые 10 букв имени исполняемого файла без расширения <имя> - это первые 11 букв имени исполняемого файла без расширения
pwd показывает имя текущего каталога pwd показывает имя текущего каталога
reboot перезагружает компьютер или ядро KolibriOS. reboot kernel перезапустить ядро Kolibri reboot перезагружает компьютер или ядро KolibriOS. reboot kernel перезапустить ядро Kolibri
rm удаляет <файл> rm удаляет <файл>

View File

@ -1,3 +1,10 @@
Shell 0.7.7 // 06.02.2017 // Leency
* help ג¥¯¥אל ¢כ¢®₪¨ג ב¯¨ב®× ×®¬¬ ­₪ ¢ גא¨ ×®«®­×¨
* ps ג¥¯¥אל ¢כ¢®₪¨ג א §¬¥א <20>‡“, ¨ב¯®«ל§ד¥¬כ© ¯א®ז¥בב®¬
* ls ג¥¯¥אל ¢כ¢®₪¨ג ¢ב¥ ה ©«כ ­¥ ¢ ®₪­ד,   ¢ ­¥ב×®«ל×® ×®«®­®×
א §¬¥א ×®«®­®× א בח¨גכ¢ ¥גבן ¨בו®₪ן ¨§ ב ¬®£® ₪«¨­­®£® ¨¬¥­¨ ה ©«  ¢ ¯ ¯×¥
בג אכ© ¢כ¢®₪ ב¯¨ב×®¬ ¯® ¯א¥¦­¥¬ד ₪®בגד¯¥­ ח¥א¥§ ׫מח '-1'
Shell 0.7.6 // 06.02.2017 // Siemargl Shell 0.7.6 // 06.02.2017 // Siemargl
* ” ©«®¢ë¥ ®¯¥à æ¨¨ ¨á¯®«ì§ãîâ 64-bit à §¬¥àë ä ©«®¢. * ” ©«®¢ë¥ ®¯¥à æ¨¨ ¨á¯®«ì§ãîâ 64-bit à §¬¥àë ä ©«®¢.
cp <file> <dest> ⥯¥àì ¯®­¨¬ ¥â, ¥á«¨ <dest> - ª â «®£ cp <file> <dest> ⥯¥àì ¯®­¨¬ ¥â, ¥á«¨ <dest> - ª â «®£

View File

@ -12,9 +12,14 @@ int i;
if ( !strlen(cmd) ) if ( !strlen(cmd) )
{ {
int columns_max=3;
printf (available, NUM_OF_CMD); printf (available, NUM_OF_CMD);
for (i = 0; i < NUM_OF_CMD; i++) for (i = 0; i < NUM_OF_CMD; i++)
printf(" %s\n\r", COMMANDS[i].name); {
printf(" %-12s", COMMANDS[i].name);
if ((i) && ((i+1)%columns_max == 0)) printf("\n\r");
}
if ((i)%columns_max != 0) printf("\n\r");
return TRUE; return TRUE;
} }
else else

View File

@ -4,11 +4,13 @@ int cmd_ls(char dir[])
kol_struct70 k70; kol_struct70 k70;
unsigned *n; unsigned *n;
unsigned num_of_file; unsigned num_of_file; // number of files in directory
unsigned *t; unsigned *t;
unsigned type_of_file; unsigned type_of_file; // check is this a file or a folder
int i, result; int i, result;
bool single_column_mode = FALSE;
k70.p00 = 1; k70.p00 = 1;
k70.p04 = 0; k70.p04 = 0;
@ -17,22 +19,27 @@ k70.p12 = 2; // just for test exist & read number of entries
k70.p16 = (unsigned) malloc(32+k70.p12*560); k70.p16 = (unsigned) malloc(32+k70.p12*560);
k70.p20 = 0; k70.p20 = 0;
/// !!!
// …᫨ ls § ¯ã᪠¥âáï ¡¥§ ¯ à ¬¥â஢, ¯à®á¬ âਢ ¥¬ ⥪ã騩 ª â «®£ if (!strnicmp(dir,"-1",1))
{
single_column_mode = TRUE;
dir += 3;
}
if ( !strlen(dir) ) if ( !strlen(dir) )
k70.p21 = cur_dir; k70.p21 = cur_dir;
else else
k70.p21 = dir; k70.p21 = dir;
result = kol_file_70(&k70); result = kol_file_70(&k70);
if ( !((result==0) || (result==6)) ) // ¯à®¢¥à塞 áãé¥á⢮¢ ­¨¥ ª â «®£  if ( !((result==0) || (result==6)) ) // check does the directory exists
{ {
free( (void*) k70.p16); free( (void*) k70.p16);
return FALSE; return FALSE;
} }
n = (unsigned*) (k70.p16+8); n = (unsigned*) (k70.p16+8);
num_of_file = *n; // ç¨á«® ä ©«®¢ ¢ ª â «®£¥ num_of_file = *n;
// now read full directory // now read full directory
k70.p12 = num_of_file; k70.p12 = num_of_file;
@ -48,7 +55,12 @@ if ( !((result==0) || (result==6)) )
return FALSE; return FALSE;
} }
for (i = 0; i < num_of_file; i++) // if there was '-1' param, then show single column mode
// otherwise show files in several columns
if (single_column_mode == TRUE)
{
_SINGLE_COLUMN_MODE:
for (i = 0; i < num_of_file; i++)
{ {
printf (" %s", k70.p16+32+40+(264+40)*i); printf (" %s", k70.p16+32+40+(264+40)*i);
t = (unsigned*) (k70.p16+32+(264+40)*i); t = (unsigned*) (k70.p16+32+(264+40)*i);
@ -57,6 +69,39 @@ for (i = 0; i < num_of_file; i++)
printf ("/"); printf ("/");
printf ("\n\r"); printf ("\n\r");
} }
}
else
{
int longest_name_len = 0;
int console_window_width = 78; //need to get this value from console.obj if it's possible
for (i = 0; i < num_of_file; i++)
{
int current_name_len;
current_name_len = strlen( (char*)k70.p16+32+40+(264+40)*i);
if (current_name_len > longest_name_len) longest_name_len = current_name_len;
}
longest_name_len+=2; //consider space separator and '/' symbol for folders
int columns_max = console_window_width / longest_name_len;
if (longest_name_len >= console_window_width) goto _SINGLE_COLUMN_MODE; //there was too long filename
for (i = 0; i < num_of_file; i++)
{
char cur_file[2048];
strncpy(cur_file, (char*)k70.p16+32+40+(304)*i, sizeof(cur_file)-2);
t = (unsigned*) (k70.p16+32+(304)*i);
type_of_file = *t;
if ( (0x10 == (type_of_file&0x10)) || (8 == (type_of_file&8)) ) strcat(cur_file, "/");
printf ("%*s", -longest_name_len, cur_file);
if ((i>0) && ((i+1)%columns_max == 0)) printf ("\n\r");
}
if ((i)%columns_max != 0) printf("\n\r");
}
free((void*)k70.p16); free((void*)k70.p16);
return TRUE; return TRUE;

View File

@ -13,6 +13,8 @@ if (NULL == buf1k)
sel = param && strlen(param) > 0; sel = param && strlen(param) > 0;
printf (" PID NAME RAM KB\n\r", PID, buf1k+10);
for (i = 1;;i++) for (i = 1;;i++)
{ {
n = kol_process_info(i, buf1k); n = kol_process_info(i, buf1k);
@ -22,7 +24,7 @@ for (i = 1;;i++)
{ {
if (!sel || 0 == strnicmp(param, buf1k+10, 10)) if (!sel || 0 == strnicmp(param, buf1k+10, 10))
{ {
printf (" %7d %s\n\r", PID, buf1k+10); printf (" %7d %11s %d\n\r", PID, buf1k+10, (*(int*)(buf1k+26)+1)/1024);
if (sel) if (sel)
{ {
LAST_PID = PID; LAST_PID = PID;

View File

@ -1,5 +1,5 @@
#define SHELL_VERSION "0.7.6" #define SHELL_VERSION "0.7.7"
extern char PATH[256]; extern char PATH[256];
extern char PARAM[256]; extern char PARAM[256];

View File

@ -13,7 +13,7 @@ const command_t COMMANDS[]=
{"help", " Gives help on commands. Usage:\n\r help ;it lists all builtins\n\r help <command> ;help on command\n\r", &cmd_help}, {"help", " Gives help on commands. Usage:\n\r help ;it lists all builtins\n\r help <command> ;help on command\n\r", &cmd_help},
{"history", " Lists used commands\n\r", &cmd_history}, {"history", " Lists used commands\n\r", &cmd_history},
{"kill", " Stops a running process. Usage:\n\r kill <PID of process>\n\r kill all\n\r", &cmd_kill}, {"kill", " Stops a running process. Usage:\n\r kill <PID of process>\n\r kill all\n\r", &cmd_kill},
{"ls", " Lists the files in a directory. Usage:\n\r ls ;lists the files in current directory\n\r ls <directory> ;lists the files at specified folder\n\r", &cmd_ls}, {"ls", " Lists the files in a directory. Usage:\n\r ls ;lists the files in current directory\n\r ls <directory> ;lists the files at specified folder\n\r ls -1 ;lists the files in a single column\n\r", &cmd_ls},
{"mkdir", " Makes directory. Usage:\n\r mkdir <folder name> ;creates the folder in working directory\n\r mkdir <path><folder name> ;create folder by specified path\n\r", &cmd_mkdir}, {"mkdir", " Makes directory. Usage:\n\r mkdir <folder name> ;creates the folder in working directory\n\r mkdir <path><folder name> ;create folder by specified path\n\r", &cmd_mkdir},
{"more", " Displays a file data to the screen. Usage:\n\r more <file name>\n\r", &cmd_more}, {"more", " Displays a file data to the screen. Usage:\n\r more <file name>\n\r", &cmd_more},
{"ps", " Lists the current processes running\n\r or shows more info on <procname> and save LASTPID\n\r", &cmd_ps}, {"ps", " Lists the current processes running\n\r or shows more info on <procname> and save LASTPID\n\r", &cmd_ps},

View File

@ -1,3 +1,5 @@
#define bool int
#define FALSE 0 #define FALSE 0
#define TRUE 1 #define TRUE 1