/* this does an ls, now that get_dir has been written */
string pad_space(string str, int i) {
return str+" "[0..
i-strlen(str)];
} /* pad_space() */
string dir_entry(string path, string name) {
int size;
string *obs;
size = file_size(path+name);
if (size == -2) {
obs = get_dir(path+name+"/");
if (!obs)
size = -1;
else
size = sizeof(obs);
name += "/";
} else {
if (virtual_find_object(path+name))
name = "*"+name;
size = (size / 1024) + 1;
}
if (size < 1000)
return " "[0..3-strlen(size+"")]+size+" "+name;
return size+" "+name;
} /* dir_entry() */
int ls(string str) {
string *direc, *bit;
string bing;
int max_siz, i, size;
if (file_size(str) == -2 && str[strlen(str)-1] != '/')
str += "/";
direc = get_dir(str);
if (!direc) {
write("No files.\n");
return 0;
}
if (!sizeof(direc)) {
write("No files.\n");
return 0;
}
if (file_size(str) == -2) {
if (str[strlen(str)-1] != '/')
str += "/";
} else {
bit = explode(str, "/");
bit = bit[0..sizeof(bit)-2];
str = "/"+implode(bit,"/")+"/";
}
if(str == "//")
str = "/";
write("Dir of: "+str+"\n");
bing = "";
for (i=0;i<sizeof(direc);i++)
if (strlen(direc[i]) > 30) {
write(dir_entry(str, direc[i])+"\n");
direc = delete(direc, i, 1);
i--;
continue;
} else
bing += dir_entry(str, direc[i])+"\n";
printf( "%#-*s\n", this_player()->query_cols(), bing);
} /* ls() */