/*
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);
}