/*
Copyright (C) 1991, Marcus J. Ranum. All rights reserved.
*/
#include "config.h"
#include "mud.h"
#include "match.h"
#include "vars.h"
extern int cmd_take (int ac, char *av[], char *who, char *aswho);
static int stop_using(char *who, char *ud);
static int stop_using(char *who, char *ud)
{
if (ut_listadd (who, who, var_cont, ud))
return (UERR_FATAL);
if (ut_unset (who, who, var_using))
return (UERR_FATAL);
say (who, "You stop holding ", ut_name (ud), ".\n", (char *) 0);
return (UERR_NONE);
}
/* ARGSUSED */
int cmd_use (int ac, char *av[], char *who, char *aswho)
{
char *ud;
ud = ut_getatt (who, 0, typ_obj, var_using, (char *) 0);
/* no args stop using */
if (ac <= 1) {
if (ud == (char *) 0) {
say (who, "You aren't holding anything.\n", (char *) 0);
return (UERR_NONE);
}
return (stop_using (who, ud));
} else if (ac == 2) {
char ob[MAXOID];
int xx;
if (ud != (char *) 0 && (xx = stop_using (who, ud)) != UERR_NONE)
return (xx);
if (matchinv (who, av[1], 0, MTCH_UNIQ | MTCH_QUIET, ob) &&
matchinv (who, av[1], 0, MTCH_FRST | MTCH_QUIET, ob)) {
if ((xx = cmd_take (ac, av, who, aswho)) != UERR_NONE)
return (xx);
if (matchinv (who, av[1], 0, MTCH_UNIQ | MTCH_QUIET, ob) &&
matchinv (who, av[1], 0, MTCH_FRST | MTCH_QUIET, ob))
return (UERR_NOMATCH);
}
if (ut_listdel (who, who, var_cont, ob))
return (UERR_FATAL);
if (ut_set (who, who, typ_obj, var_using, ob))
return (UERR_FATAL);
say (who, "You are now holding ", ut_name (ob), ".\n", (char *) 0);
return (UERR_NONE);
}
say (who, "You can only use one thing at a time.\n", (char *) 0);
return (UERR_NONE);
}