kolibrios/programs/system/shell/cmd/cmd_ls.c

65 lines
1.2 KiB
C
Raw Normal View History

int cmd_ls(char dir[])
{
kol_struct70 k70;
unsigned *n;
unsigned num_of_file;
unsigned *t;
unsigned type_of_file;
int i, result;
k70.p00 = 1;
k70.p04 = 0;
//k70.p08 = 0;
k70.p12 = 2; // just for test exist & read number of entries
k70.p16 = (unsigned) malloc(32+k70.p12*560);
k70.p20 = 0;
/// !!!
// <20>᫨ ls <20><><EFBFBD><EFBFBD><EFBFBD><E1AAA0><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><E0A0AC>஢, <20><><EFBFBD><EFBFBD><EFBFBD><E0A8A2><EFBFBD><><20><><EFBFBD><E2A0AB>
if ( !strlen(dir) )
k70.p21 = cur_dir;
else
k70.p21 = dir;
result = kol_file_70(&k70);
if ( !((result==0) || (result==6)) ) // <20><EFBFBD><E0AEA2><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A2AE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E2A0AB><EFBFBD>
{
free( (void*) k70.p16);
return FALSE;
}
n = (unsigned*) (k70.p16+8);
num_of_file = *n; // <20><>᫮ 䠩<><E4A0A9><EFBFBD> <20> <20><><EFBFBD><E2A0AB><EFBFBD>
// now read full directory
k70.p12 = num_of_file;
free( (void*) k70.p16);
k70.p16 = (unsigned) malloc(32+k70.p12*560);
if ( !k70.p16 )
return FALSE;
result = kol_file_70(&k70);
if ( !((result==0) || (result==6)) )
{
free( (void*) k70.p16);
return FALSE;
}
for (i = 0; i < num_of_file; i++)
{
printf (" %s", k70.p16+32+40+(264+40)*i);
t = (unsigned*) (k70.p16+32+(264+40)*i);
type_of_file = *t;
if ( (0x10 == (type_of_file&0x10)) || (8 == (type_of_file&8)) )
printf ("/");
printf ("\n\r");
}
free((void*)k70.p16);
return TRUE;
}