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. */

/*	
**	Annotation menu For the Lima mudlib.
**      Rust @ Lima Bean Dec 3, 1995.
**
**	Todo: This relies on the fact that 2 people aren't editing the same
**      annotation at once.  If you view one that got removed while you were
**      on the view annotation menu, you're hosed.  Need to add some locking
**      code, even though this shouldn't be a problem often.
**
*/

#include <menu.h>
#include <classes.h>
#include <edit.h>

inherit MENUS;
inherit CLASS_ANNOTATION;

MENU toplevel;
MENU view_annotations;
MENU rm_annotations;
MENU_ITEM quit_item;
MENU_ITEM goto_main_menu_item;
MENU_ITEM seperator;
private nosave object annotation_target;
private nosave class annotation new_annotation;
private void remove_annotation();



private void rcv_can_ed(string y_or_n)
{
  switch(lower_case(y_or_n))
    {
    case "y":
    case "yes":
      new_annotation->read_only = 0;
      break;
    case "n":
    case "no":
      new_annotation->read_only = 1;
      break;
    default:
      get_input_then_call ((: rcv_can_ed :), "yes or no? ");
      return;
    }
  ANNOTATION_D->add_annotation(annotation_target, new_annotation);
  write("**Annotation added**\n\n");
  goto_menu_silently(toplevel);
}

private void end_edit(string array annotation)
{
  new_annotation->text = implode(annotation,"\n");
  get_input_then_call((: rcv_can_ed :), "Allow anyone to remove this "
		       "annotation? ");
}

private void rcv_title(string title)
{
  new_annotation->title = title;
  new(EDIT_OB, EDIT_TEXT, 0, (: end_edit :));
}

private void add_annotation()
{
  new_annotation = new(class annotation);
  new_annotation->author = this_body()->query_userid();
  get_input_then_call((: rcv_title :), "Subject: ");
}

private void rm_it(int a)
{
  if(ANNOTATION_D->remove_annotation(annotation_target,a) != 1)
    {
      write("**You don't have permission to remove that annotation.**\n");
    }
  else
    {
      write("**Removed.**\n");
    }
  remove_annotation();
}

private void remove_annotation()
{
  class annotation array ann;
  class annotation a;


  ann = ANNOTATION_D->retrieve_annotations(annotation_target);
  if(!ann)
    {
      write("**No Annotations to remove.**\n\n");
      return;
    }
  rm_annotations = new_menu("Remove Annotations");
  for(int i = 0; i < sizeof(ann); i++)
    {
      a = ann[i];
      add_menu_item (rm_annotations, new_menu_item(
		  sprintf("%-30s (%s on %s)",a->title,capitalize(a->author),
			  a->date), (:rm_it($(i)):)));
    }
  add_menu_item(rm_annotations, goto_main_menu_item);
  add_menu_item(rm_annotations, quit_item);

  goto_menu_silently(rm_annotations);
}


private void done_seeing_it()
{
  write("\n\n");
}


private void see_it(int index)
{
  class annotation a;
  string output;

  a = (ANNOTATION_D->retrieve_annotations(annotation_target)[index]);

  if(!a)
    {
      write("**No annotations to view.**\n");
      return;
    }
  output = sprintf("Title: %s\nAuthor: %s\n Date: %s\n"
	   "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n%s\n",
		   a->title, capitalize(a->author), a->date, a->text);

  more (output, 0, (:done_seeing_it:));
}

private void see_annotations()
{
  class annotation array ann;
  class annotation a;

  ann = ANNOTATION_D->retrieve_annotations(annotation_target);
  if(!ann)
    {
      write("**No Annotations to view.**\n\n");
      return;
    }
  view_annotations = new_menu("View Annotations -- Which to view?");
  for(int i = 0; i < sizeof(ann); i++)
    {
      a = ann[i];
      add_menu_item (view_annotations, 
		     new_menu_item(
		       sprintf("%-30s (%s on %s)",a->title,
			       capitalize(a->author),a->date),
		       (:see_it($(i)):)));
    }

  add_menu_item(view_annotations, goto_main_menu_item);
  add_menu_item(view_annotations, quit_item);

  goto_menu_silently(view_annotations);
}

void create(object o)
{

  annotation_target = o;

  toplevel 	= new_menu(mud_name()+" Annotation Menu");

  quit_item = new_menu_item("Quit", (:quit_menu_application:), "q");
  goto_main_menu_item =new_menu_item("Return to main menu", 
					 toplevel, "m");
  seperator = 
    new_seperator("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");

  // Add items to the toplevel (main) menu.  
  add_menu_item (toplevel, new_menu_item("Add annotation", (:add_annotation:),
					 "a"));
  add_menu_item (toplevel, new_menu_item("View annotations", 
					 (:see_annotations:), "v"));
  add_menu_item (toplevel, new_menu_item("Remove an annotation",
					 (:remove_annotation:), "r"));
  add_menu_item (toplevel, quit_item);

  allow_empty_selection(toplevel);
  set_no_match_function(toplevel,(:quit_if_cr:));
  }

void start_menu()
{
  init_menu_application(toplevel);
}