lima-1.0b5/
lima-1.0b5/driver/
lima-1.0b5/driver/ChangeLog.old/
lima-1.0b5/driver/Win32/
lima-1.0b5/driver/compat/
lima-1.0b5/driver/include/
lima-1.0b5/driver/testsuite/
lima-1.0b5/driver/testsuite/clone/
lima-1.0b5/driver/testsuite/command/
lima-1.0b5/driver/testsuite/data/
lima-1.0b5/driver/testsuite/etc/
lima-1.0b5/driver/testsuite/include/
lima-1.0b5/driver/testsuite/inherit/
lima-1.0b5/driver/testsuite/inherit/master/
lima-1.0b5/driver/testsuite/log/
lima-1.0b5/driver/testsuite/single/
lima-1.0b5/driver/testsuite/single/tests/compiler/
lima-1.0b5/driver/testsuite/single/tests/efuns/
lima-1.0b5/driver/testsuite/single/tests/operators/
lima-1.0b5/driver/testsuite/u/
lima-1.0b5/driver/tmp/
lima-1.0b5/etc/
lima-1.0b5/lib/WWW/help/
lima-1.0b5/lib/cmds/
lima-1.0b5/lib/cmds/create/
lima-1.0b5/lib/cmds/player/attic/
lima-1.0b5/lib/contrib/bboard/
lima-1.0b5/lib/contrib/boards/
lima-1.0b5/lib/contrib/marriage/
lima-1.0b5/lib/contrib/roommaker/
lima-1.0b5/lib/contrib/transient_effect/
lima-1.0b5/lib/daemons/channel/
lima-1.0b5/lib/daemons/imud/
lima-1.0b5/lib/data/
lima-1.0b5/lib/data/config/
lima-1.0b5/lib/data/links/
lima-1.0b5/lib/data/news/
lima-1.0b5/lib/data/players/
lima-1.0b5/lib/data/secure/
lima-1.0b5/lib/domains/
lima-1.0b5/lib/domains/std/2.4.5/maze1/
lima-1.0b5/lib/domains/std/2.4.5/npc/
lima-1.0b5/lib/domains/std/2.4.5/post_dir/
lima-1.0b5/lib/domains/std/2.4.5/sub/
lima-1.0b5/lib/domains/std/camera/
lima-1.0b5/lib/domains/std/config/
lima-1.0b5/lib/domains/std/cult/
lima-1.0b5/lib/domains/std/effects/
lima-1.0b5/lib/domains/std/misc/
lima-1.0b5/lib/domains/std/monsters/
lima-1.0b5/lib/domains/std/recorder/
lima-1.0b5/lib/domains/std/rooms/
lima-1.0b5/lib/domains/std/rooms/beach/
lima-1.0b5/lib/domains/std/rooms/labyrinth/
lima-1.0b5/lib/domains/std/school/
lima-1.0b5/lib/domains/std/school/O/
lima-1.0b5/lib/domains/std/spells/
lima-1.0b5/lib/domains/std/spells/stock-mage/
lima-1.0b5/lib/domains/std/spells/stock-priest/
lima-1.0b5/lib/help/
lima-1.0b5/lib/help/admin/
lima-1.0b5/lib/help/hints/General_Questions/
lima-1.0b5/lib/help/hints/Pirate_Quest/
lima-1.0b5/lib/help/player/
lima-1.0b5/lib/help/player/bin/
lima-1.0b5/lib/help/player/quests/
lima-1.0b5/lib/help/wizard/
lima-1.0b5/lib/help/wizard/coding/guilds/
lima-1.0b5/lib/help/wizard/coding/rooms/
lima-1.0b5/lib/help/wizard/lib/daemons/
lima-1.0b5/lib/help/wizard/lib/lfun/
lima-1.0b5/lib/help/wizard/lib/std/
lima-1.0b5/lib/help/wizard/mudos_doc/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/interactive/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/concepts/
lima-1.0b5/lib/help/wizard/mudos_doc/driver/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/arrays/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/buffers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/compile/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/filesystem/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/floats/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/functions/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/general/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mappings/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mixed/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/numbers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/constructs/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/types/
lima-1.0b5/lib/include/driver/
lima-1.0b5/lib/log/
lima-1.0b5/lib/obj/admtool/
lima-1.0b5/lib/obj/admtool/internal/
lima-1.0b5/lib/obj/admtool/mudinfo/
lima-1.0b5/lib/obj/admtool/secure/
lima-1.0b5/lib/obj/secure/
lima-1.0b5/lib/obj/secure/cmd/
lima-1.0b5/lib/obj/secure/mailers/
lima-1.0b5/lib/obj/secure/shell/
lima-1.0b5/lib/obj/secure/shell/classes/
lima-1.0b5/lib/obj/tasktool/
lima-1.0b5/lib/obj/tasktool/internal/
lima-1.0b5/lib/open/
lima-1.0b5/lib/secure/
lima-1.0b5/lib/secure/cgi/
lima-1.0b5/lib/secure/modules/
lima-1.0b5/lib/secure/simul_efun/
lima-1.0b5/lib/std/adversary/
lima-1.0b5/lib/std/adversary/advancement/
lima-1.0b5/lib/std/adversary/armor/
lima-1.0b5/lib/std/adversary/blows/
lima-1.0b5/lib/std/adversary/death/
lima-1.0b5/lib/std/adversary/formula/
lima-1.0b5/lib/std/adversary/health/
lima-1.0b5/lib/std/adversary/pulse/
lima-1.0b5/lib/std/adversary/wield/
lima-1.0b5/lib/std/classes/event_info/
lima-1.0b5/lib/std/container/
lima-1.0b5/lib/std/living/
lima-1.0b5/lib/std/modules/contrib/
lima-1.0b5/lib/std/patterns/
lima-1.0b5/lib/std/race/
lima-1.0b5/lib/std/race/restricted/
lima-1.0b5/lib/std/room/
lima-1.0b5/lib/tmp/
lima-1.0b5/lib/trans/
lima-1.0b5/lib/trans/admincmds/
lima-1.0b5/lib/trans/obj/
lima-1.0b5/lib/wiz/
/* Do not remove the headers from this file! see /USAGE for more info. */

/*	
**	Player menu by John Viega (rust@virginia.edu) 5-Jul-95
**	For the Lima mudlib.
**
**	Still want to have:
**	o channel menu
**     o more reporter commands
**	o what's new or something like that.
**	o take args at line, ie, b yes for biff or somesuch
**     o disable newbie options
*/

#include <menu.h>
#include <mudlib.h>
#include <playerflags.h>
#include <commands.h>
//### for now
#include <security.h>

inherit MENUS;
//### for now
inherit M_ACCESS;

MENU toplevel;
// submenus of the toplevel (main) menu
MENU soulmenu;
MENU reportmenu;
MENU remotemenu;
MENU personalmenu;
// submenus of personalmenu
MENU biffmenu;  
MENU snoopablemenu; 


MENU_ITEM quit_item;	
MENU_ITEM goto_main_menu_item;
MENU_ITEM main_seperator;

// right now, we're just going to call the help command.
//private MENU helpmenu;


private mapping dispatch = ([
    "n" : "news",
    "w" : "who",
    "b" : "bug",
    "t" : "typo",
    "i" : "idea",
    "?" : "help",
    "l" : "mudlist",
    ]);


private nomask void simple_cmd(string cmd)
{
    call_other(CMD_DIR_PLAYER "/" + dispatch[cmd], "player_menu_entry");
}


void
start_mail()
{
    this_user()->query_mailer()->begin_mail();
}

void handle_finger(string person)
{   ZBUG(person);
    CMD_OB_FINGER->player_menu_entry(person);
    prompt_then_return();
}

void test_soul(string s)
{
    CMD_OB_SEMOTE->player_menu_entry(s);
    prompt_then_return();
}

void find_soul(string s)
{
    if(!s || s == "") {
	write("Invalid.\n");	
	return;
    }

    CMD_OB_EMOTEAPROPOS->player_menu_entry(s);
}

void show_souls(string s)
{
    CMD_OB_FEELINGS->player_menu_entry(s);
}

 
void show_adverbs(string s)
{
  write(
"Remember: You can get any of these adverbs by typing part of the adverb \n"
"then *, if the part you type is unique.  Eg, kick rust ene* would give you:\n"
"kick rust energetically, but kick rust en* won't because it also\n"
"matches endearingly and enthusiastically.\n");

CMD_OB_ADVERBS->player_menu_entry(s);
}


void change_email(string s)
{
  this_user()->set_email(s);
  write("Email info changed.\n");
}

void change_url(string s)
{
  this_user()->set_url(s);
  write("Home page address changed.\n");
}

void change_real_name(string s)
{
   this_user()->set_real_name(s);
   write("Real name changed.\n");
}

void change_title(string s)
{

  if(strsrch(s,"$N") == -1)
    s = "$N " + s;
  this_body()->set_title(s);
  
  write("Title changed.\n");
}

void
query_personal_info()
{
  printf("Your title is: %s\n"
	 "Your provided e-mail address is: %s\n"
	 "Your provided WWW home page is: %s\n"
	 "You %sget notified when new mail arrives.\n" 
	 "Wizards %s snoop you.\n",
	 this_body()->query_title(),
	 this_user()->query_email(),
	 this_user()->query_url(),
	 this_body()->test_flag(F_BIFF) ? "" : "DON'T ",
	 this_body()->test_flag(F_SNOOPABLE) ? "CAN" : "can't"
	 );

  prompt_then_return();
}

void prompt_change_title()
{
    input_one_arg("Change title to what? ", (: change_title :));
}

void prompt_change_email()
{
    input_one_arg("Change e-mail to what? ", (: change_email :));
}

void prompt_change_real_name()
{
   input_one_arg("Change real name to what? ", (: change_real_name :));
}

void prompt_change_url()
{
    input_one_arg("Change your WWW homepage address to what? ", (: change_url :));
}

void set_ansi(string s)
{
    CMD_OB_ANSI->player_menu_entry(s);
}
   
void prompt_change_ansi()
{
	input_one_arg("set ANSI 'on' or 'off': ", (: set_ansi :));
}

void set_biff(string s)
{
    if ( s == "y" )
	s = "on";
    else
	s = "off";

    CMD_OB_BIFF->player_menu_entry(s);
    goto_previous_menu();
} 

void set_snoopable(string s)
{
    if ( s == "y" )
	s = "on";
    else
	s = "off";

    CMD_OB_SNOOPABLE->player_menu_entry(s);
    goto_previous_menu();
}

void finish_who(string mudname)
{
    CMD_OB_FINGER->player_menu_entry("@" + mudname);
    printf("%s queried.  It's up to that mud to reply to you.\n", mudname);
    prompt_then_return();
}

void
remote_who()
{
  write("Which mud do you want to query?\n");
  complete_choice(0, IMUD_D->query_mudnames(), (: finish_who :));
}


void create()
{
    set_privilege(1);

  toplevel 	= new_menu(mud_name()+" Game Menu");
  soulmenu 	= new_menu("Soul Menu");
  reportmenu 	= new_menu("Reporter Menu");
  personalmenu  = new_menu("Personal Menu");
  biffmenu      = new_menu("Notify you when you receive new mail?");
  snoopablemenu = new_menu("Allow wizards to snoop you?");
  remotemenu    = new_menu("Other muds");

  // Since we'll use these things more than once, we can just
  // call new_menu_item once, and insert them wherever we want
  // to use them.
  quit_item = new_menu_item("Quit", (:quit_menu_application:), "q");
  goto_main_menu_item =new_menu_item("Return to main menu", 
					 toplevel, "m");


  main_seperator = new_seperator("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");


  // Add items to the toplevel (main) menu.  
  add_menu_item (toplevel, main_seperator);
  add_menu_item (toplevel, new_menu_item("Read news (news)", 
					 (: simple_cmd :), "n"));
  add_menu_item (toplevel, new_menu_item("Send or read mail (mail)",
					 (: start_mail :), "m"));
  add_menu_item (toplevel, new_menu_item("See who's on (who)", 
					    (: simple_cmd :), "w"));
  add_menu_item (toplevel,
                new_menu_item("Get info about a person (finger)",
                           (: get_input_then_call,
                           (: handle_finger :),
                           "Finger who? " :), "f"));
  add_menu_item (toplevel, new_menu_item("Soul/emote Menu", soulmenu, "s"));
  add_menu_item (toplevel, new_menu_item("Report a bug, typo or idea", 
					 reportmenu, "r"));
  add_menu_item (toplevel, new_menu_item("Change or view your personal information. ",
					 personalmenu, "i"));
  add_menu_item (toplevel, new_menu_item("Information on other muds",
					 remotemenu, "o"));
  add_menu_item (toplevel, quit_item);
  add_menu_item (toplevel, new_menu_item("Help", (: simple_cmd :), "?"));

  // Add items to the soul menu.
  add_menu_item (soulmenu, main_seperator);
  add_menu_item (soulmenu, 
		 new_menu_item("List souls", (: get_input_then_call,
					      (: show_souls :) ,
					      "List all souls starting with "
					      "(enter for ALL souls): " :),
			       "s"));
  add_menu_item (soulmenu, 
		 new_menu_item("List adverbs", (: get_input_then_call,
					      (: show_adverbs :),
					      "List all adverbs starting with "
					      "(enter for ALL adverbs): " :),
			       "a"));
  add_menu_item (soulmenu, 
		 new_menu_item("Find souls", (: get_input_then_call,
					      (: find_soul :),
					      "Find souls whose output "
					      "contains string: " :),
			       "f"));

  add_menu_item (soulmenu, 
  		 new_menu_item("Test a soul", (: get_input_then_call,
(: test_soul :),
					       "Soul to test: " :),  "t"));

  add_menu_item (soulmenu, quit_item);
  
  add_menu_item (soulmenu, goto_main_menu_item);
					 
  add_menu_item (reportmenu, main_seperator);
  add_menu_item (reportmenu, new_menu_item("Report a bug", (: simple_cmd :),
					   "b"));
  add_menu_item (reportmenu, new_menu_item("Report a typo", (: simple_cmd :),
					   "t"));
  add_menu_item (reportmenu, new_menu_item("Report an idea", (: simple_cmd :),
					   "i"));
  add_menu_item (reportmenu, quit_item);
  add_menu_item (reportmenu, goto_main_menu_item);

  add_menu_item (personalmenu, main_seperator);
  add_menu_item (personalmenu, new_menu_item("View your personal information",
					      (: query_personal_info :), "v"));
  add_menu_item (personalmenu, new_menu_item("Change your title", 
					      (: prompt_change_title :), "t"));
  add_menu_item (personalmenu, new_menu_item("Change your supplied "
					      "e-mail address",
					      (: prompt_change_email :), "e"));
  add_menu_item (personalmenu, new_menu_item("Change your supplied WWW home "
					     "page address",
					      (: prompt_change_url :), "w"));
  add_menu_item (personalmenu, new_menu_item("Set or unset mail notification",
					     biffmenu, "n"));
  add_menu_item (personalmenu, new_menu_item("Set whether or not you can be "
					     "snooped", snoopablemenu, "s"));
  add_menu_item (personalmenu, new_menu_item("Change your supplied real name",
                                              (: prompt_change_real_name :), "r"));
  add_menu_item (personalmenu, new_menu_item("Set ANSI on/off",
					      (: prompt_change_ansi :), "a"));
  add_menu_item (personalmenu, quit_item);
  add_menu_item (personalmenu, goto_main_menu_item);

  add_menu_item (biffmenu, main_seperator);
  add_menu_item (biffmenu, new_menu_item("Yes", (: set_biff :), "y"));
  add_menu_item (biffmenu, new_menu_item("No", (: set_biff :), "n"));
  add_menu_item (biffmenu, quit_item);
  add_menu_item (biffmenu, goto_main_menu_item);

  add_menu_item (snoopablemenu, main_seperator);
  add_menu_item (snoopablemenu, new_menu_item("Yes", 
					      (: set_snoopable :), "y"));
  add_menu_item (snoopablemenu, new_menu_item("No", 
					      (: set_snoopable :), "n"));
  add_menu_item (snoopablemenu, quit_item);
  add_menu_item (snoopablemenu, goto_main_menu_item);

  add_menu_item (remotemenu, main_seperator);
  add_menu_item (remotemenu, new_menu_item("List muds " + mud_name() + 
					   " knows about", 
                (: simple_cmd :), "l"));
  add_menu_item (remotemenu, new_menu_item("See who's on another mud",
					   (:remote_who:), "w"));
  add_menu_item (remotemenu, quit_item);
  add_menu_item (remotemenu, goto_main_menu_item);
}


void
start_menu()
{
  init_menu_application(toplevel);
}