/* Copyright 1989, 1990 by James Aspnes, David Applegate, and Bennet Yee */
/* See the file COPYING for distribution information */
#include "db.h"
datum flag_set (datum x, datum flag)
{
struct object *o;
return ((o = object (x)) != 0 && (o->flags & flag) != 0);
}
datum controls (datum x, datum thing)
{
struct object *o;
struct object *t;
if (x == thing) {
return 1;
} else if ((t = object (thing)) == 0 || oflag_set (t, F_ADMIN)
|| (o = object (x)) == 0) {
return 0;
} else {
return (oflag_set (o, F_WIZARD)
|| (o->owner == t->owner && !oflag_set (t, F_WIZARD)));
}
}
/*
datum can_read(datum x, datum thing)
{
return flag_set(thing, F_PUBLIC) || controls(x, thing);
}
*/
/* returns 1 if a is an ancestor of x */
datum is_ancestor (datum x, datum a)
{
for (;;) {
if (x == a)
return 1;
if (x == NOTHING)
return 0;
x = safe_get (x, parent);
}
}