nightmare4_fluffos_v1/
nightmare4_fluffos_v1/bin/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/ChangeLog.old/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/Win32/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/compat/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/compat/simuls/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/include/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/clone/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/command/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/data/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/etc/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/include/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/inherit/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/inherit/master/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/log/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/single/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/single/tests/compiler/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/single/tests/efuns/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/single/tests/operators/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/u/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/tmp/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/windows/
nightmare4_fluffos_v1/lib/cfg/
nightmare4_fluffos_v1/lib/cmds/admins/
nightmare4_fluffos_v1/lib/cmds/common/
nightmare4_fluffos_v1/lib/cmds/creators/include/
nightmare4_fluffos_v1/lib/cmds/creators/include/SCCS/
nightmare4_fluffos_v1/lib/cmds/hm/
nightmare4_fluffos_v1/lib/daemon/services/
nightmare4_fluffos_v1/lib/doc/
nightmare4_fluffos_v1/lib/doc/faq/
nightmare4_fluffos_v1/lib/doc/help/classes/
nightmare4_fluffos_v1/lib/doc/help/creators/
nightmare4_fluffos_v1/lib/doc/help/hm/
nightmare4_fluffos_v1/lib/doc/help/players/
nightmare4_fluffos_v1/lib/doc/help/races/
nightmare4_fluffos_v1/lib/doc/help/religion/
nightmare4_fluffos_v1/lib/doc/mudlib/
nightmare4_fluffos_v1/lib/doc/mudlib/cfg/
nightmare4_fluffos_v1/lib/domains/Ylsrim/
nightmare4_fluffos_v1/lib/domains/Ylsrim/adm/
nightmare4_fluffos_v1/lib/domains/Ylsrim/armour/
nightmare4_fluffos_v1/lib/domains/Ylsrim/fish/
nightmare4_fluffos_v1/lib/domains/Ylsrim/meal/
nightmare4_fluffos_v1/lib/domains/Ylsrim/npc/
nightmare4_fluffos_v1/lib/domains/Ylsrim/virtual/
nightmare4_fluffos_v1/lib/domains/Ylsrim/weapon/
nightmare4_fluffos_v1/lib/domains/Ylsrim/xtra/
nightmare4_fluffos_v1/lib/lib/comp/
nightmare4_fluffos_v1/lib/lib/lvs/
nightmare4_fluffos_v1/lib/lib/std/
nightmare4_fluffos_v1/lib/lib/user/
nightmare4_fluffos_v1/lib/news/
nightmare4_fluffos_v1/lib/obj/
nightmare4_fluffos_v1/lib/obj/include/
nightmare4_fluffos_v1/lib/save/
nightmare4_fluffos_v1/lib/save/kills/a/
nightmare4_fluffos_v1/lib/save/kills/b/
nightmare4_fluffos_v1/lib/save/kills/f/
nightmare4_fluffos_v1/lib/save/kills/m/
nightmare4_fluffos_v1/lib/save/kills/q/
nightmare4_fluffos_v1/lib/save/kills/r/
nightmare4_fluffos_v1/lib/secure/cfg/
nightmare4_fluffos_v1/lib/secure/cfg/classes/
nightmare4_fluffos_v1/lib/secure/cfg/races/SCCS/
nightmare4_fluffos_v1/lib/secure/cmds/creators/include/
nightmare4_fluffos_v1/lib/secure/cmds/players/
nightmare4_fluffos_v1/lib/secure/cmds/players/include/
nightmare4_fluffos_v1/lib/secure/daemon/include/
nightmare4_fluffos_v1/lib/secure/lib/
nightmare4_fluffos_v1/lib/secure/lib/include/
nightmare4_fluffos_v1/lib/secure/lib/net/
nightmare4_fluffos_v1/lib/secure/lib/std/
nightmare4_fluffos_v1/lib/secure/obj/
nightmare4_fluffos_v1/lib/secure/obj/include/
nightmare4_fluffos_v1/lib/secure/save/
nightmare4_fluffos_v1/lib/secure/save/boards/
nightmare4_fluffos_v1/lib/secure/save/votes/
nightmare4_fluffos_v1/lib/spells/
nightmare4_fluffos_v1/lib/verbs/admins/include/
nightmare4_fluffos_v1/lib/verbs/common/
nightmare4_fluffos_v1/lib/verbs/common/include/
nightmare4_fluffos_v1/lib/verbs/creators/
nightmare4_fluffos_v1/lib/verbs/creators/include/
nightmare4_fluffos_v1/lib/verbs/players/include/SCCS/
nightmare4_fluffos_v1/lib/verbs/rooms/
nightmare4_fluffos_v1/lib/verbs/rooms/include/
nightmare4_fluffos_v1/lib/www/
nightmare4_fluffos_v1/old/
nightmare4_fluffos_v1/old/tools/
nightmare4_fluffos_v1/win32/
// file:    to_object.c (simul_efun)
// mudlib:  CynoMUD-II
// author:  Truilkan
// date:    1992 September 17
// purpose: Converts a string into the object it represents.  This object
//  is intended to be used as a parser by those wizard commands that need
//  to refer to objects by various means (such as dest and trans).

// to_object() returns the object that a given string references.
// strings are of the form 'object' or 'object@environment' where environment
// can also be of the form 'object@environment'.  object may also be of
// the form 'e(object)' which refers to the environment of object.
//
// object may optionally be prefixed with one of the following symbols:
//
//  !  (what follows names an object that is not an NPC or a player)
//  %  (what follows names a player)
//  $  (what follows names an NPC)
//  #  (what follows is an ordinal value, e.g. #3, #4, etc)
//  /  (what follows is a filename of an object)
//
// object may also be one of the words "here" or "me" where here refers
// to the environment of this player and "me" refers to this_player().
//
// example usage:

/*
   object obj;

  // find the object which has an id of "key" and is in player truilkan's
  // inventory.
  //
  obj = to_object("!key@%truilkan");
  //
  // find the orc NPC which is in the bag which is in the church 
  //
  obj = to_object("$orc@!bag@/room/church");
  //
  //  Destroy the 4th object in the inventory of the environment of this
  //  player (0 is the first object :)
  // 
  to_object("#3@here")->eventDestruct();
*/

static object
e(object p, int outside)
{
   if (outside) {
      return p ? environment(p) : 0;
   } else {
      return p;
   }
}

object
to_object(mixed target)
{
   int ch;
   string err;

   if (objectp(target)) { /* already an object */
      return target;
   } else if (stringp(target)) { /* is a string */
      string str, thing, env_desc, temp, path;
      object env, p, *list;
      int len, outside, is_object, place, which;

      outside = 0;
      place = 0;
      env = 0;
      str = (string)target;
      if (sscanf(str,"e(%s)",temp) == 1) {
         str = temp;
         outside = 1;
      }
      if (sscanf(str,"%s@%s", thing, env_desc) == 2) {
         str = thing;
         if (!(env = to_object(env_desc))) {
            return 0;
         }
         place = 1;
      }
      if (str == "here") {
         return e(environment(this_player()), outside);
      }
      if (str == "me") {
         return e(this_player(), outside);
      }
      if (!env) {
         env = this_player();
      }
      len = strlen(str);
      ch = str[0];
      if (ch == '/' || ch == '$' || ch == '#' || ch == '%' || ch == '!') {
         if (len < 2) {
            return 0;
         }
         if (ch != '/') {
            str = str[1..len-1];
            len--;
         }
      }
      p = 0;
      is_object = 0;
      switch (ch) {
      case '/' : /* filename */
         if(file_size(str + ".c") < 0) return 0; /* patch by val */
         return e(load_object(str), outside);
      case '#' : /* nth object */
         list = all_inventory(env);
         sscanf(str, "%d", which);
         return e(list[which], outside);
      case '$' : /* monster */
         p = find_living(str);
         if (!p || interactive(p)) {
            return 0; /* p non-existent or was a player */
         }
         break;
      case '%' :  /* player */
         p = find_player(str);
         if (!p) {
            return 0;
         }
         break;
      case '!' :
         is_object = 1;
         break;
      }
      if (!is_object) {
         if (!p) {
            p = find_player(str);
         }
         if (!p) {
            p = find_living(str);
         }
      }
      if (!p) {
         p = present(str, env);
      }
      if (p && (!place || present(p, env))) {
         return e(p, outside);
      }
      path = (string)this_player()->resolve_path(str);
      if(!path) return 0;
/* patch added by valodin to avoid searching for bad path */
      return e(load_object(path), outside);
   }
   return 0;
}