/* Do not remove the headers from this file! see /USAGE for more info. */

//:PLAYERCOMMAND
//USAGE: describe - takes you into a simple editor to enter your description
//       describe <new description> - sets your description to new description
//
//This command lets you enter the description people see when they look at you.

#include <commands.h>

inherit CMD;
inherit M_INPUT;

#define MAX_DESCRIP_SIZE 6

private string* descrip = ({});

private void end_describe()
{
  if(!sizeof(descrip))
  {
    write("Description unchanged.\n");
  } else {
    this_body()->set_description(implode(descrip, "\n") + "\n");
    write("Description finished.\n");
  }

  destruct();
}


private void receive_line(string input)
{
  if(input == ".")
  {
    modal_pop();
    end_describe();
    return;
  }
  if(input == "~q")
  {
    write("Aborted.\n");
    modal_pop();
    destruct();
    return;
  }
  descrip += ({input});
  if(sizeof(descrip) == MAX_DESCRIP_SIZE)
  {
    write("Maximum lines reached.  Terminating input.\n");
    modal_pop();
    end_describe();
  }
}

nomask void begin_describing()
{
  if ( previous_object() != find_object(CMD_OB_DESCRIBE) )
    error("invalid attempt to use describe.c\n");

  modal_push((: receive_line :), "");
}


void create()
{
  ::create();
  no_redirection();
}

private void main(string s)
{
  if ( stringp(s) && strlen(s) )
  {
    descrip = explode(s, "\n");
    end_describe();
    return;
  }

  out("Describe yourself in "+ MAX_DESCRIP_SIZE+" lines or less.\n"
      "Type '.' on a line of its own when done.\n"
      "Type '~q' to abort this description.\n"
      "-----------------------------------------\n");

  new(CMD_OB_DESCRIBE)->begin_describing();
}