/* Copyright (c) 1993 Stephen F. White */

#include <stdio.h>
#include "config.h"
#include "cool.h"
#include "proto.h"

int
owns(Objid player, Objid what)
{
    Var		p, owners;
    Object     *o;

    if (!valid(player) || !(o = retrieve(what))) {
	return 0;
    }
    p.type = OBJ; p.v.obj = player;

    if (var_get_global(o, "owners", &owners) != E_NONE) {
	return 1;
    } else if (owners.type != LIST) {
	return 1;
    } else if (list_ismember(p, owners.v.list)) {
	return 1;
    }
    return 0;
}

int
is_wizard(Objid player)
{
    Var    	p, wizards;

    p.type = OBJ; p.v.obj = player;
    if (player.server == 0 && player.id == SYS_OBJ) {
	return 1;		/* SYS_OBJ is always a wizard :) */
    } else if (!valid(player)) {
	return 0;
    } else if (var_get_global(retrieve(sys_obj), "wizards", &wizards)
		!= E_NONE) {
	return 0;
    } else if (wizards.type != LIST) {
	return 0;
    } else if (list_ismember(p, wizards.v.list)) {
	return 1;
    }
    return 0;
}

int
can_program(Objid player, Objid what)
{
    return (owns(player, what) || is_wizard(player));
}

int
can_clone(Objid player, Objid what)
{
    Var		public;

    if (owns(player, what) || is_wizard(player)) {
	return 1;
    } else if (var_get_global(retrieve(what), "public", &public) != E_NONE) {
	return 0;
    } else {
	return ISTRUE(public);
    }
}