final_realms_fluffos_v1/
final_realms_fluffos_v1/bin/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/ChangeLog.old/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/Win32/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/simuls/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/clone/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/command/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/data/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/etc/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/master/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/log/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/compiler/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/efuns/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/operators/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/u/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/tmp/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/windows/
final_realms_fluffos_v1/lib/baseobs/guilds/
final_realms_fluffos_v1/lib/baseobs/misc/
final_realms_fluffos_v1/lib/baseobs/races/shadows/
final_realms_fluffos_v1/lib/cmds/god/
final_realms_fluffos_v1/lib/cmds/handlers/
final_realms_fluffos_v1/lib/cmds/handlers/cmds/
final_realms_fluffos_v1/lib/d/heaven/
final_realms_fluffos_v1/lib/d/heaven/heaven/ave/
final_realms_fluffos_v1/lib/d/mudlib/
final_realms_fluffos_v1/lib/d/newbie/
final_realms_fluffos_v1/lib/d/newbie/docs/
final_realms_fluffos_v1/lib/d/newbie/drow/armour/
final_realms_fluffos_v1/lib/d/newbie/drow/items/
final_realms_fluffos_v1/lib/d/newbie/drow/mobs/
final_realms_fluffos_v1/lib/d/newbie/drow/oldmobs/
final_realms_fluffos_v1/lib/d/newbie/drow/weapons/
final_realms_fluffos_v1/lib/d/newbie/duergar/weapons/
final_realms_fluffos_v1/lib/d/newbie/dwarf/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/cafe/
final_realms_fluffos_v1/lib/d/newbie/elf/chars/equip/
final_realms_fluffos_v1/lib/d/newbie/elf/items/armours/
final_realms_fluffos_v1/lib/d/newbie/elf/items/obj/
final_realms_fluffos_v1/lib/d/newbie/elf/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/quick_fix/
final_realms_fluffos_v1/lib/d/newbie/gnome/armour/
final_realms_fluffos_v1/lib/d/newbie/gnome/buildings/
final_realms_fluffos_v1/lib/d/newbie/gnome/items/
final_realms_fluffos_v1/lib/d/newbie/gnome/npcs/clones/
final_realms_fluffos_v1/lib/d/newbie/gnome/rooms/northrooms/
final_realms_fluffos_v1/lib/d/newbie/gnome/weapons/
final_realms_fluffos_v1/lib/d/newbie/goblin/armour/
final_realms_fluffos_v1/lib/d/newbie/goblin/items/
final_realms_fluffos_v1/lib/d/newbie/grads/log/
final_realms_fluffos_v1/lib/d/newbie/grads/npcs/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/cave1/
final_realms_fluffos_v1/lib/d/newbie/grads/temp/
final_realms_fluffos_v1/lib/d/newbie/guests/weapons/
final_realms_fluffos_v1/lib/d/newbie/half-elf/items/
final_realms_fluffos_v1/lib/d/newbie/half-elf/newroomss/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/castle/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/drows/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/savannah/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/secret/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/town/
final_realms_fluffos_v1/lib/d/newbie/halfling/
final_realms_fluffos_v1/lib/d/newbie/halfling/misc/
final_realms_fluffos_v1/lib/d/newbie/halfling/rooms/cave/
final_realms_fluffos_v1/lib/d/newbie/human/
final_realms_fluffos_v1/lib/d/newbie/human/armour/
final_realms_fluffos_v1/lib/d/newbie/human/monsters/
final_realms_fluffos_v1/lib/d/newbie/human/obj/
final_realms_fluffos_v1/lib/d/newbie/human/weapons/
final_realms_fluffos_v1/lib/d/newbie/lizard/armour/
final_realms_fluffos_v1/lib/d/newbie/lizard/items/
final_realms_fluffos_v1/lib/d/newbie/lizard/underwater/
final_realms_fluffos_v1/lib/d/newbie/lizard/weapons/
final_realms_fluffos_v1/lib/d/newbie/logs/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/rooms/
final_realms_fluffos_v1/lib/d/newbie/newelf/
final_realms_fluffos_v1/lib/d/newbie/newelf/chars/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/recopied/
final_realms_fluffos_v1/lib/d/newbie/newelf/obj/
final_realms_fluffos_v1/lib/d/newbie/newelf/quest_docs./
final_realms_fluffos_v1/lib/d/newbie/newken/
final_realms_fluffos_v1/lib/d/newbie/newken/chars/
final_realms_fluffos_v1/lib/d/newbie/newken/misc/
final_realms_fluffos_v1/lib/d/newbie/newken/npcs/
final_realms_fluffos_v1/lib/d/newbie/newken/obj/
final_realms_fluffos_v1/lib/d/newbie/newliz/
final_realms_fluffos_v1/lib/d/newbie/newliz/cave/
final_realms_fluffos_v1/lib/d/newbie/newliz/npcs/
final_realms_fluffos_v1/lib/d/newbie/orc/items/misc/
final_realms_fluffos_v1/lib/d/newbie/orc/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/orc/tower/
final_realms_fluffos_v1/lib/d/vehicle/
final_realms_fluffos_v1/lib/doc/
final_realms_fluffos_v1/lib/doc/driver/
final_realms_fluffos_v1/lib/doc/driver/concepts/
final_realms_fluffos_v1/lib/doc/driver/driver/
final_realms_fluffos_v1/lib/doc/driver/efuns/arrays/
final_realms_fluffos_v1/lib/doc/driver/efuns/bitstrings/
final_realms_fluffos_v1/lib/doc/driver/efuns/communication/
final_realms_fluffos_v1/lib/doc/driver/efuns/core/
final_realms_fluffos_v1/lib/doc/driver/efuns/debugging/
final_realms_fluffos_v1/lib/doc/driver/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/driver/efuns/interactive/
final_realms_fluffos_v1/lib/doc/driver/efuns/mappings/
final_realms_fluffos_v1/lib/doc/driver/efuns/objects/
final_realms_fluffos_v1/lib/doc/driver/efuns/security/
final_realms_fluffos_v1/lib/doc/driver/efuns/strings/
final_realms_fluffos_v1/lib/doc/driver/efuns/system/
final_realms_fluffos_v1/lib/doc/driver/efuns/types/
final_realms_fluffos_v1/lib/doc/driver/lpc/constructs/
final_realms_fluffos_v1/lib/doc/driver/lpc/types/
final_realms_fluffos_v1/lib/doc/driver/platforms/
final_realms_fluffos_v1/lib/doc/lpc/
final_realms_fluffos_v1/lib/doc/mail/
final_realms_fluffos_v1/lib/doc/man/
final_realms_fluffos_v1/lib/doc/man/html/
final_realms_fluffos_v1/lib/doc/man/html/applies/
final_realms_fluffos_v1/lib/doc/man/html/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/html/driver/
final_realms_fluffos_v1/lib/doc/man/html/efuns/
final_realms_fluffos_v1/lib/doc/man/html/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/html/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/html/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/html/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/html/efuns/general/
final_realms_fluffos_v1/lib/doc/man/html/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/
final_realms_fluffos_v1/lib/doc/man/local/applies/
final_realms_fluffos_v1/lib/doc/man/local/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/local/applies/master/
final_realms_fluffos_v1/lib/doc/man/local/concepts/
final_realms_fluffos_v1/lib/doc/man/local/defines/
final_realms_fluffos_v1/lib/doc/man/local/driver/
final_realms_fluffos_v1/lib/doc/man/local/efuns/
final_realms_fluffos_v1/lib/doc/man/local/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/local/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/local/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/local/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/local/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/local/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/local/efuns/general/
final_realms_fluffos_v1/lib/doc/man/local/efuns/interactive/
final_realms_fluffos_v1/lib/doc/man/local/efuns/internals/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/local/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/objects/
final_realms_fluffos_v1/lib/doc/man/local/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/efuns/sockets/
final_realms_fluffos_v1/lib/doc/man/local/efuns/strings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/system/
final_realms_fluffos_v1/lib/doc/man/local/historical/
final_realms_fluffos_v1/lib/doc/man/local/lfun/QC/
final_realms_fluffos_v1/lib/doc/man/local/lfun/events/
final_realms_fluffos_v1/lib/doc/man/local/lfun/monster/
final_realms_fluffos_v1/lib/doc/man/local/lfun/properties/
final_realms_fluffos_v1/lib/doc/man/local/lpc/
final_realms_fluffos_v1/lib/doc/man/local/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/local/lpc/types/
final_realms_fluffos_v1/lib/doc/man/local/standards/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/basic/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/intermediate/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/concepts/
final_realms_fluffos_v1/lib/doc/man/mudos/driver/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/general/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mixed/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/types/
final_realms_fluffos_v1/lib/doc/races/
final_realms_fluffos_v1/lib/doc/races/old_race/
final_realms_fluffos_v1/lib/global/virtual/
final_realms_fluffos_v1/lib/global/wiz_backup/
final_realms_fluffos_v1/lib/net/config/
final_realms_fluffos_v1/lib/net/daemon/chars/
final_realms_fluffos_v1/lib/net/inherit/
final_realms_fluffos_v1/lib/net/intermud3/
final_realms_fluffos_v1/lib/net/intermud3/cmds/
final_realms_fluffos_v1/lib/net/intermud3/save/
final_realms_fluffos_v1/lib/net/intermud3/services/
final_realms_fluffos_v1/lib/net/obj/
final_realms_fluffos_v1/lib/net/old/
final_realms_fluffos_v1/lib/net/old/intermud/
final_realms_fluffos_v1/lib/net/old/intermud/adm/
final_realms_fluffos_v1/lib/net/old/intermud/services/
final_realms_fluffos_v1/lib/net/old/intermud/udp/
final_realms_fluffos_v1/lib/net/virtual/
final_realms_fluffos_v1/lib/obj/b_day/
final_realms_fluffos_v1/lib/obj/chars/
final_realms_fluffos_v1/lib/obj/handlers/lists/
final_realms_fluffos_v1/lib/obj/handlers/useless/
final_realms_fluffos_v1/lib/obj/monsters/
final_realms_fluffos_v1/lib/obj/roomgen/
final_realms_fluffos_v1/lib/obj/soul/
final_realms_fluffos_v1/lib/obj/vegetation/
final_realms_fluffos_v1/lib/obj/weapons/oldsys/
final_realms_fluffos_v1/lib/open/
final_realms_fluffos_v1/lib/players/g/
final_realms_fluffos_v1/lib/releasefiles/d/heaven/
final_realms_fluffos_v1/lib/releasefiles/d/mudlib/
final_realms_fluffos_v1/lib/releasefiles/d/newbie/
final_realms_fluffos_v1/lib/releasefiles/doc/
final_realms_fluffos_v1/lib/releasefiles/players/g/
final_realms_fluffos_v1/lib/releasefiles/save/
final_realms_fluffos_v1/lib/releasefiles/save/environ/
final_realms_fluffos_v1/lib/releasefiles/save/roomgen/
final_realms_fluffos_v1/lib/releasefiles/secure/
final_realms_fluffos_v1/lib/releasefiles/w/
final_realms_fluffos_v1/lib/releasefiles/w/god/
final_realms_fluffos_v1/lib/room/
final_realms_fluffos_v1/lib/save/
final_realms_fluffos_v1/lib/save/environ/
final_realms_fluffos_v1/lib/save/roomgen/
final_realms_fluffos_v1/lib/scripts/
final_realms_fluffos_v1/lib/secure/crerem/
final_realms_fluffos_v1/lib/secure/dom/
final_realms_fluffos_v1/lib/secure/log/
final_realms_fluffos_v1/lib/secure/misc/
final_realms_fluffos_v1/lib/std/adnd/
final_realms_fluffos_v1/lib/std/commands/shadows/
final_realms_fluffos_v1/lib/std/creator/
final_realms_fluffos_v1/lib/std/curses/
final_realms_fluffos_v1/lib/std/curses/old_sys/
final_realms_fluffos_v1/lib/std/curses/shadows/
final_realms_fluffos_v1/lib/std/dom/
final_realms_fluffos_v1/lib/std/effects/
final_realms_fluffos_v1/lib/std/effects/healing/
final_realms_fluffos_v1/lib/std/effects/other/
final_realms_fluffos_v1/lib/std/effects/poisons/
final_realms_fluffos_v1/lib/std/environ/
final_realms_fluffos_v1/lib/std/guilds/
final_realms_fluffos_v1/lib/std/guilds/priests/samples/
final_realms_fluffos_v1/lib/std/guilds/wizards/
final_realms_fluffos_v1/lib/std/living/baldy/
final_realms_fluffos_v1/lib/std/living/divstuff/
final_realms_fluffos_v1/lib/std/paran/
final_realms_fluffos_v1/lib/std/poisons/
final_realms_fluffos_v1/lib/std/poisons/shadows/
final_realms_fluffos_v1/lib/std/poisons/weapons/
final_realms_fluffos_v1/lib/std/race_groups/
final_realms_fluffos_v1/lib/std/room/
final_realms_fluffos_v1/lib/std/room/old/
final_realms_fluffos_v1/lib/std/rooms/
final_realms_fluffos_v1/lib/std/shadows/
final_realms_fluffos_v1/lib/std/shadows/test_shad/
final_realms_fluffos_v1/lib/std/socket/
final_realms_fluffos_v1/lib/std/spells/
final_realms_fluffos_v1/lib/std/vaults/
final_realms_fluffos_v1/lib/tmp/
final_realms_fluffos_v1/lib/w/
final_realms_fluffos_v1/lib/w/god/
final_realms_fluffos_v1/old/
final_realms_fluffos_v1/win32/
inherit "obj/roomgen/support";
 
string *room_object_names, *room_object_startpos, *room_object_files;
mixed *room_object_funcs;
static string object_name, setup_function_return;
static int pos, func_pos;
 
#define OBJECT_NAME_HELP "/doc/roomgen/object_name_help"
#define OBJECT_FILE_HELP "/doc/roomgen/object_file_help"
#define SETUP_EXAMPLES "/doc/roomgen/setup_examples"
#define SETUP_FUNCTION_HELP "/doc/roomgen/setup_examples"
#define START_HELP "/doc/roomgen/start_help"
#define OBJECT_HELP "/doc/roomgen/object_help"
 
void object_menu();
void setup_function_menu3();
void setup_function_menu5();
void setup_function_menu7();
void list_setup_functions();
void list_objects();
void edit_object3();

void init_object_data() {
  room_object_names = ({ });
  room_object_files = ({ });
  room_object_funcs = ({ });
  room_object_startpos = ({ });
}
 
 
/* Add object code */
 
 
void add_standard_object_setup_funcs() {
  write("not implemented\n");
  input_to("object_menu");
}

void add_object_menu() {
  write("Name of object (? for suggestions) : ");
  input_to("setup_function_menu2");
}
 
void setup_function_menu2(string str) {
  int loop;
 
  if(str == "?") {
    cat(OBJECT_NAME_HELP);
    add_object_menu();
    return;
  }
  if(str == "") {
    object_menu();
    return;
  }
  if((pos = member_array(str, room_object_names)) != -1) {
    write("Object already exists.\n");
    object_menu();
    return;
  }
  object_name = str;
  setup_function_menu3();
}
 
void setup_function_menu3() {
  write("Which object to configure (? for common ones) : ");
  input_to("setup_function_menu4");
}
 
void setup_function_menu4(string str) {
  if(str == "?") {
    cat(OBJECT_FILE_HELP);
    setup_function_menu3();
    return;
  }
  if(str == "") {
    object_menu();
    return;
  }
  room_object_names += ({ object_name });
  room_object_files += ({ str });
  room_object_funcs += ({ ({ }) });
  pos = sizeof(room_object_funcs) - 1;
  setup_function_menu7();
}
 
void setup_function_menu7() {
  write("In what object will this object start (? for help) : ");
  input_to("setup_function_menu8");
}
 
void setup_function_menu8(string str) {
  if(str == "?") {
    cat(START_HELP);
    setup_function_menu7();
    return;
  }
  if(str == "") {
    object_menu();
    return;
  }
  room_object_startpos += ({ str });
  setup_function_return = "object_menu";
  setup_function_menu5();
}
 
void add_setup_function() {
  write("enter function and parameters (? for samples)\n: ");
  input_to("add_setup_function2");
}
 
void add_setup_function2(string str) {
  if(str == "?") {
    cat(SETUP_EXAMPLES);
    add_setup_function();
    return;
  }
  if(str == "") {
    setup_function_menu5();
    return;
  }
  room_object_funcs[func_pos] += ({ str });
  setup_function_menu5();
}
 
void list_setup_functions1() {
  list_setup_functions();
  get_key("setup_function_menu5");
}
 
void list_setup_functions() {
  int loop;
 
  for(loop = 0; loop < sizeof(room_object_funcs[pos]); loop++) {
    write(loop + " :\t" + room_object_funcs[pos][loop] + "\n");
  }
}
 
void edit_setup_function() {
  write("Edit which function (? for list) : ");
  input_to("edit_setup_function2");
}
 
void edit_setup_function2(string str) {
  if(str == "?") {
    list_setup_functions();
  }
  if(str == "") {
    setup_function_menu5();
  }
  if(sscanf(str, "%d", func_pos) >= sizeof(room_object_funcs[pos])) {
    write("Not that many functions.  Enter number of function.\n");
    setup_function_menu5();
    return;
  }
  write("Enter new function (? for suggestions) : ");
  input_to("edit_setup_function3");
}
 
void edit_setup_function3(string str) {
  if(str == "?") {
    cat(SETUP_EXAMPLES);
    write("Enter new function (? for suggestions) : ");
    input_to("edit_setup_function3");
    return;
  }
  if(str == "") {
    setup_function_menu5();
    return;
  }
  room_object_funcs[pos][func_pos] = str;
  setup_function_menu5();
}
 
void delete_setup_function() {
  write("Delete which setup function (? for list) : ");
  input_to("delete_setup_function2");
}
 
void delete_setup_function2(string str) {
  if(str == "?") {
    list_setup_functions();
  }
  if(str == "") {
    setup_function_menu5();
  }
  if(sscanf(str, "%d", func_pos) >= sizeof(room_object_funcs[pos])) {
    write("Not that many functions.  Enter number of function.\n");
    setup_function_menu5();
    return;
  }
  write("Delete " + room_object_funcs[pos][func_pos] +
        "\nAre you sure (Y/N) : ");
  input_to("delete_setup_function3");
}
 
void delete_setup_function3(string str) {
  string old;
 
  str = lower_case(str);
  old = room_object_funcs[pos][func_pos];
  if(str[0] != 'y') {
    write(old + " NOT deleted.\n");
    setup_function_menu5();
    return;
  }
  room_object_funcs[pos] = delete(room_object_funcs[pos], func_pos, 1);
  write(old + " deleted.\n");
  setup_function_menu5();
}
 
void setup_function_menu5() {
  write("Object : " + room_object_names[sizeof(room_object_names)-1] + "\n" +
        "File   : " + room_object_files[sizeof(room_object_files)-1] + "\n" +
        "Please select from the following commands:\n"+
        "   1. add standard setup functions\n"+
        "   2. add setup function call\n"+
        "   3. list setup function calls\n"+
        "   4. edit setup function call\n"+
        "   5. delete setup function call\n"+
        "   end - return to add object menu\n"+
        "   help - about setup functions\n"+
        "Selection : ");
  input_to("setup_function_menu6");
}
 
void setup_function_menu6(string str) {
  switch(str) {
    case "1":
      add_standard_object_setup_funcs();
      return;
    case "2":
      add_setup_function();
      return;
    case "3":
      list_setup_functions1();
      return;
    case "4":
      edit_setup_function();
      return;
    case "5":
      delete_setup_function();
      return;
    case "end":
      call_other(this_object(), setup_function_return);
      return;
    case "help":
      cat(SETUP_FUNCTION_HELP);
      get_key("setup_function_menu5");
      return;
    case "":
      setup_function_menu5();
      return;
    default:
      write("Invalid Choice\nSelection : ");
      input_to("setup_function_menu6");
      return;
  }
}
 
 
/* list objects code */
 
 
void list_objects1() {
  list_objects();
  get_key("object_menu");
}
 
void list_objects() {
  int loop1, loop2;
 
  for(loop1 = 0; loop1 < sizeof(room_object_names); loop1++) {
    write("Name  : " + room_object_names[loop1] + "\n" +
          "File  : " + room_object_files[loop1] + "\n" +
          "Start : " + room_object_startpos[loop1] + "\n" +
          "Setup : \n");
    for(loop2 = 0; loop2 < sizeof(room_object_funcs[loop1]); loop2++) {
      write(room_object_funcs[loop1][loop2] + "\n");
    }
    write("\n");
  }
}
 
 
/* edit object code */
 
 
void get_new_name() {
  write("Enter new name for " + room_object_names[pos] + " : ");
  input_to("get_new_name2");
}
 
void get_new_name2(string str) {
  if(str != "") {
    write("Name changed from "+room_object_names[pos]+" to "+str+"\n");
    room_object_names[pos] = str;
  }
  edit_object3();
}
 
void get_new_file() {
  write("Enter new file for " + room_object_names[pos] + " : ");
  input_to("get_new_file2");
}
 
void get_new_file2(string str) {
  if(str != "") {
    write("File changed from "+room_object_files[pos]+" to "+str+"\n");
    room_object_files[pos] = str;
  }
  edit_object3();
}
 
void get_new_startpos() {
  write("Enter new start position (? for help) : ");
  input_to("get_new_startpos2");
}

void get_new_startpos2(string str) {
  if(str != "") {
    write("Start changed from "+room_object_startpos[pos]+" to "+str+"\n");
    room_object_startpos[pos] = str;
  }
  edit_object3();
}
 
void edit_object() {
  write("Edit which object (? for list) : ");
  input_to("edit_object2");
}
 
void edit_object2(string str) {
  int loop;
 
  if(str == "?") {
    for(loop = 0; loop < sizeof(room_object_names); loop++) {
      write(room_object_names[loop] + "\n");
    }
    edit_object();
    return;
  }
  if(str == "") {
    object_menu();
    return;
  }
  if((pos = member_array(str, room_object_names)) == -1) {
    write("No such object.\n");
    object_menu();
  }
  edit_object3();
}
 
void edit_object3() {
  write("Please select from the following:\n"+
        "   1. Change Name\n"+
        "   2. Change File\n"+
        "   3. Change Start Position\n"+
        "   4. Edit Setup Functions\n"+
        "   end - return to Object menu\n"+
        "Selection : ");
  input_to("handle_edit_object");
}
 
void handle_edit_object(string str) {
  switch(str) {
    case "1":
      get_new_name();
      return;
    case "2":
      get_new_file();
      return;
    case "3":
      get_new_startpos();
      return;
    case "4":
      setup_function_return = "edit_object3";
      setup_function_menu5();
      return;
    case "end":
      object_menu();
      return;
    case "":
      edit_object3();
      return;
    default:
      write("Bad Choice\nSelection : ");
      input_to("handle_edit_object");
      return;
  }
}
 
 
/* delete object code */
 
 
void delete_object() {
  write("Delete which object (? for list) : ");
  input_to("delete_object2");
}
 
void delete_object2(string str) {
  int loop;
 
  if(str == "?") {
    for(loop = 0; loop < sizeof(room_object_names); loop++) {
      write(room_object_names[loop] + "\n");
    }
    delete_object();
    return;
  }
  if(str == "") {
    object_menu();
    return;
  }
  if((pos = member_array(str, room_object_names)) == -1) {
    write("No such object.\n");
    object_menu();
    return;
  }
  write("Delete object " + str + ".  Are you sure (Y/N) : ");
  input_to("delete_object3");
}
 
void delete_object3(string str) {
  string old;
 
  str = lower_case(str);
  old = room_object_names[pos];
  if(str[0] != 'y') {
    write(old + " NOT deleted.\n");
    object_menu();
    return;
  }
  room_object_names = delete(room_object_names, pos, 1);
  room_object_files = delete(room_object_files, pos, 1);
  room_object_funcs = delete(room_object_funcs, pos, 1);
  room_object_startpos = delete(room_object_startpos, pos, 1);
  write(old + " deleted.\n");
}
 
/* object menu code */
 
 
void object_menu() {
  write("Please select from the following commands:\n"+
        "   1. add object to the room\n"+
        "   2. list objects of the room\n"+
        "   3. edit object of the room\n"+
        "   4. remove object from the room\n"+
        "   end - return to main menu\n"+
        "   help - help on objects\n"+
        "Selection :");
  input_to("handle_object_menu");
}
 
void handle_object_menu(string str) {
  switch(str) {
    case "1":
      add_object_menu();
      return;
    case "2":
      list_objects1();
      return;
    case "3":
      edit_object();
      return;
    case "4":
      delete_object();
      return;
    case "help":
      cat(OBJECT_HELP);
      get_key("object_menu");
      return;
    case "end":
      this_object()->main_menu();
      return;
    case "":
      object_menu();
      return;
    default:
      write("Invalid Choice\nSelection : ");
      input_to("handle_object_menu");
      return;
  }
}
 
 
/* IO interface code */
 
 
string object_vars() {
  if(sizeof(room_object_names)) {
    return "\nobject *objs;\n\n";
  }
  else {
    return "";
  }
}
 
string dump_objects() {
  int loop1, loop2;
  string str;
 
  loop1 = 0;
  str = "";
  str += "  if(!objs) {\n";
  str += "    objs = allocate(" + sizeof(room_object_names) + ");\n  }\n";
  for(loop1 = 0; loop1 < sizeof(room_object_names); loop1++) {
    str += "/* start of object "+loop1+" - "+room_object_names[loop1]+" */\n";
    str += "  objs[" + loop1 + "] = clone_object(\"" +
           room_object_files[loop1] + "\");\n";
    for(loop2 = 0; loop2 < sizeof(room_object_funcs[loop1]); loop2++) {
      str += "  objs[" + loop1 + "]->" + room_object_funcs[loop1][loop2] +
             ";\n";
    }
    str += "  objs[" + loop1 + "]->move(" +
    this_object()->get_name(room_object_startpos[loop1]) + ");"+
                   " /* " + room_object_startpos[loop1] + " */\n";
    str += "/* end of object " + loop1 + " */\n";
  }
  return str;
}
 
void parse_object(string str) {
  int loop, loop1, tem1;
  string text, start, obj, rest, tem0;
  string *calls;
  string *funcs;

  loop = 0;
  rest = str;
  while(sscanf(rest, "%s/* start of object %d - %s */\n%s"+
                    "/* end of object %d */\n%s", tem0, tem1,
                     object_name, text, tem1, rest) == 6) {

    calls = ({ });
    funcs = explode(text, "\n");
    sscanf(funcs[sizeof(funcs) - 1], "%s/* %s */", tem0, start);
    funcs = delete(funcs, sizeof(funcs) - 1, 1);
    sscanf(funcs[0], "%sclone_object(\"%s\");", tem0, obj);
    funcs = delete(funcs, 0, 1);
    for(loop1 = 0; loop1 < sizeof(funcs); loop1++) {
      string call;

      if(sscanf(funcs[loop1], "  objs["+loop+"]->%s;", call)) {
        calls += ({ call });
      }
    }
    room_object_names += ({ object_name });
    room_object_files += ({ obj });
    room_object_startpos += ({ start });
    room_object_funcs += ({ calls });
  }
}
 
void review_object() {
  list_objects();
}
 
int num_objects() {
  return sizeof(room_object_names);
}