untermud/DOC/
untermud/DOC/U/
untermud/DOC/U/U-examples/
untermud/DOC/internals/
untermud/DOC/wizard/
untermud/MISC/
untermud/MISC/dbchk/
untermud/RWHO/
untermud/RWHO/rwhod/
/*
    Copyright (C) 1991, Marcus J. Ranum. All rights reserved.
*/

/* configure all options BEFORE including system stuff. */
#include    "config.h"
#include    "mud.h"
#include    "match.h"
#include    "vars.h"


/* ARGSUSED */
int cmd_drop (int argc, char *argv[], char *who, char *aswho)
{
  int x;
  char *loc;
  char *dest;
  char ob[MAXOID];
  char *used;
  char work[MAXOID];            /* Work buffer demanded by ut_dropto() */

  loc = ut_loc (who);

  for (x = 1; x < argc; x++) {
    if (matchinv (who, argv[x], 1, MTCH_UNIQ | MTCH_QUIET, ob) &&
      matchinv (who, argv[x], 1, MTCH_FRST, ob))
      continue;

    dest = ut_dropto (ob, loc, work);
    used = ut_getatt (who, 0, typ_obj, var_using, (char *) 0);

    if (used == (char *) 0 || strcmp (used, ob)) {
      if (ut_listdel (who, who, var_cont, ob))
        return (UERR_FATAL);
    } else {
      if (ut_unset (who, who, var_using))
        return (UERR_FATAL);
    }
    if (ut_set (who, ob, typ_obj, var_loc, dest))
      return (UERR_FATAL);
    if (ut_listadd (who, dest, var_cont, ob))
      return (UERR_FATAL);

    if (!activate (ACTIV_PONLY, who, ob, loc, var_drop, argc, argv))
      say (who, "dropped ", ut_name (ob), ".\n", (char *) 0);

    if (!activate (ACTIV_ECAST, who, ob, loc, var_odrop, argc, argv))
      ut_roombcast (loc, who, ut_name (who), " dropped ", ut_name (ob), ".\n",
        (char *) 0);;
  }
  return (UERR_NONE);
}