untermud/DOC/
untermud/DOC/U/
untermud/DOC/U/U-examples/
untermud/DOC/internals/
untermud/DOC/wizard/
untermud/MISC/
untermud/MISC/dbchk/
untermud/RWHO/
untermud/RWHO/rwhod/
/*
    Copyright (C) 1991, Marcus J. Ranum. All rights reserved.
*/

/* configure all options BEFORE including system stuff. */
#include    "config.h"
#include    "mud.h"
#include    "vars.h"

/*
TinyMUD-like "say"
*/

/* ARGSUSED */
int cmd_say (int argc, char *argv[], char *who, char *aswho)
{
  char *un;
  char nx[MAXOID];
  char *room;
  char *inroom;
  int ax;

  room = ut_loc (run_actor ());

  /* get list of who is in the room */
  inroom = ut_getatt (room, 0, typ_list, var_ply, (char *) 0);
  if (inroom == (char *) 0) {
    /* We're not in a room, let's see if we're 'in' a player. */
    inroom = ut_getatt (room, 0, typ_flag, var_isplay, (char *) 0);
    if (inroom == (char *) 0) {
      say (who, "You aren't anywhere.  Your voice falls flat.\n", (char *) 0);
      return (UERR_NONE);
    }

    /* We're 'inside' a player. */
    /* set player's name */
    un = ut_name (run_actor ());

    /* hack to handle empty statements */
    if (argc == 1)
      argv[1] = "";

    if (argc < 3) {
      say (room, un, " says, \"", argv[1], "\"\n", (char *) 0);
    } else {
      say (room, un, " says, \"", (char *) 0);
      for (ax = 1; ax < argc;) {
        say (room, argv[ax], (char *) 0);
        if (++ax < argc)
          say (room, " ", (char *) 0);
      }
      say (room, "\"\n", (char *) 0);
    }

    un = run_actor ();

    /* now talk to ourself :) */
    if (argc < 3) {
      say (un, "You say, \"", argv[1], "\"\n", (char *) 0);
    } else {
      say (un, "You say, \"", (char *) 0);
      for (ax = 1; ax < argc;) {
        say (un, argv[ax], (char *) 0);
        if (++ax < argc)
          say (un, " ", (char *) 0);
      }
      say (un, "\"\n", (char *) 0);
    }
    return (UERR_NONE);
  }

  /* set player's name */
  un = ut_name (run_actor ());

  /* hack to handle empty statements */
  if (argc == 1)
    argv[1] = "";

  /* iterate across list of people in the room - excluding ourself */
  while ((inroom = lstnext (inroom, nx, sizeof (nx))) != (char *) 0) {
    if (strcmp (nx, who)) {
      if (argc < 3) {
        say (nx, un, " says, \"", argv[1], "\"\n", (char *) 0);
      } else {
        say (nx, un, " says, \"", (char *) 0);
        for (ax = 1; ax < argc;) {
          say (nx, argv[ax], (char *) 0);
          if (++ax < argc)
            say (nx, " ", (char *) 0);
        }
        say (nx, "\"\n", (char *) 0);
      }
    }
  }

  un = run_actor ();

  /* now talk to ourself :) */
  if (argc < 3) {
    say (un, "You say, \"", argv[1], "\"\n", (char *) 0);
  } else {
    say (un, "You say, \"", (char *) 0);
    for (ax = 1; ax < argc;) {
      say (un, argv[ax], (char *) 0);
      if (++ax < argc)
        say (un, " ", (char *) 0);
    }
    say (un, "\"\n", (char *) 0);
  }
  return (UERR_NONE);
}