// mudlib: Lil
// file: /single/simul_efun.c
#include <globals.h>
varargs int
getoid(object ob)
{
int id;
if (!ob) {
ob = previous_object();
}
sscanf(file_name(ob), "%*s#%d", id);
return id;
}
string
user_cwd(string name)
{
return ("/u/" + name[0..0] + "/" + name);
}
string user_path(string name)
{
return (user_cwd(name) + "/");
}
// Get the owner of a file. Used by log_error() in master.c.
string
file_owner(string file)
{
string name, rest, dir;
if (file[0] != '/') {
file = "/" + file;
}
if (sscanf(file, "/u/%s/%s/%s", dir, name, rest) == 3) {
return name;
}
return 0;
}
// dump_variable, author: Huthar@Portals, TMI
// - returns a printable representation of any variable.
string
dump_variable(mixed arg)
{
mixed *index;
string rtn;
int i;
if (objectp(arg))
return "("+file_name(arg)+")";
if (stringp(arg))
return "\""+arg+"\"";
if (intp(arg))
return "#"+arg;
if (pointerp(arg)) {
rtn = "ARRAY\n";
for (i = 0; i < sizeof(arg); i++)
rtn += "["+i+"] == "+dump_variable(arg[i])+"\n";
return rtn;
}
if (mapp(arg)) {
rtn = "MAPPING\n";
index = keys(arg);
for (i = 0; i < sizeof(index); i++)
rtn += "[" + dump_variable(index[i]) + "] == "
+ dump_variable(arg[index[i]])+"\n";
return rtn;
}
if (functionp(arg)) {
rtn = "FUNCTION\n";
return "(:" + dump_variable(arg[0]) + ", "
+ dump_variable(arg[1]) + ":)\n";
}
return "UNKNOWN";
}
/*
// Thanks to Huthar for resolve_path.
*/
string resolve_path(string curr, string new) {
int i;
string *tmp;
string t1,t2,t3,t4;
if (!new || new == ".") return curr;
if (new == "here")
{
return file_name(environment(this_object())) + ".c";
}
if (new == "~" || new == "~/" )
new = user_path((string)this_player()->query_name());
if (sscanf(new,"~/%s",t1))
new = user_path((string)this_player()->query_name()) + t1;
else if (sscanf(new,"~%s",t1))
new = user_path(t1);
else if (new[0] != '/')
new = curr + "/" + new;
if (new[strlen(new) - 1] != '/')
new += "/";
tmp = explode(new,"/");
if (!tmp) tmp = ({"/"});
for (i = 0; i < sizeof(tmp); i++)
if (tmp[i] == "..") {
if (sizeof(tmp) > 2) {
tmp = tmp[0..(i-2)] + tmp[(i+1)..(sizeof(tmp)-1)];
i -= 2;
} else {
tmp = tmp[2 ..(sizeof(tmp)-1)];
i = 0;
}
}
new = "/" + implode(tmp,"/");
if (new == "//") new = "/";
return new;
}
// domain_file should return the domain associated with a given file.
string
domain_file(string file)
{
return ROOT_UID;
}
// creator_file should return the name of the creator of a specific file.
string
creator_file(string file)
{
return ROOT_UID;
}
// author_file should return the name of the author of a specific file.
string
author_file(string file)
{
return ROOT_UID;
}
// replaces the former efun
void
log_file(string file, string text)
{
write_file(LOG_DIR + "/" + file, text);
}