/* /adm/simul_efun/domains.c
* from Nightmare IV
* SimulEfuns for managing domains
* created by Descartes of Borg 931204
*/
#include <dirs.h>
object domain_master(mixed val) {
if(!val) return 0;
if(stringp(val)) {
if(!domain_exists(val)) return 0;
else return load_object(DOMAINS_DIRS+"/"+val+"/adm/master");
}
else if(objectp(val)) {
if(val = domain(val))
return load_object(DOMAINS_DIRS+"/"+val+"/adm/master");
else return 0;
}
error("Bad argument 1 to load_object().\n");
}
int domain_exists(string dmn) {
if(!stringp(dmn)) return 0;
return (file_size(DOMAINS_DIRS+"/"+dmn+"/") == -2);
}
string domain(mixed val) {
string nom, tmp;
if(objectp(val) && domain_exists(tmp=(string)val->query_domain()))
return tmp;
else if(stringp(val) && val=load_object(val) &&
domain_exists(tmp=(string)val->query_domain())) return tmp;
nom = (objectp(val) ? file_name(val) : (string)val);
if(sscanf(nom, DOMAINS_DIRS+"/%s/%*s", tmp) == 1) return tmp;
if(sscanf(nom, REALMS_DIRS+"/%*s/%s/%*s", tmp) == 1 &&
domain_exists(tmp)) return tmp;
return 0;
}